PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.2-a.3
Jetpack – WP Security, Backup, Speed, & Growth v16.2-a.3
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 All 500 releases
jetpack / modules / theme-tools / compat / twentytwenty.php
twentytwenty.php
254 lines 6.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Jetpack Compatibility File
4 * See: https://jetpack.com/
5 *
6 * @package automattic/jetpack
7 */
8
9 if ( ! defined( 'ABSPATH' ) ) {
10 exit( 0 );
11 }
12
13 /**
14 * Add Jetpack extra functionality to Twenty Twenty.
15 *
16 * See: https://jetpack.com/support/infinite-scroll/
17 * See: https://jetpack.com/support/responsive-videos/
18 * See: https://jetpack.com/support/content-options/
19 */
20 function twentytwenty_jetpack_setup() {
21 /**
22 * Add theme support for Infinite Scroll.
23 */
24 add_theme_support(
25 'infinite-scroll',
26 array(
27 'type' => 'click',
28 'container' => 'site-content',
29 'render' => 'twentytwenty_infinite_scroll_render',
30 'footer' => 'site-content',
31 'footer_widgets' => array(
32 'sidebar-1',
33 'sidebar-2',
34 ),
35 )
36 );
37 }
38 add_action( 'after_setup_theme', 'twentytwenty_jetpack_setup' );
39
40 /**
41 * Custom render function for Infinite Scroll.
42 */
43 function twentytwenty_infinite_scroll_render() {
44 while ( have_posts() ) {
45 echo '<hr class="post-separator styled-separator is-style-wide section-inner" aria-hidden="true" />';
46 the_post();
47 get_template_part( 'template-parts/content', get_post_type() );
48 }
49 }
50
51 /**
52 * Remove Sharing buttons and Likes from excerpts that are used as intro on single post views.
53 */
54 function twentytwenty_no_sharing_on_excerpts() {
55 if ( is_single() ) {
56 // Remove sharing buttons.
57 remove_filter( 'the_excerpt', 'sharing_display', 19 );
58
59 // Remove Likes.
60 if ( class_exists( 'Jetpack_Likes' ) ) {
61 remove_filter( 'the_excerpt', array( Jetpack_Likes::init(), 'post_likes' ), 30 );
62 }
63 }
64 }
65 add_action( 'loop_start', 'twentytwenty_no_sharing_on_excerpts' );
66
67 /**
68 * We do not need to display the Likes Heading here.
69 *
70 * @param string $heading Headline structure.
71 * @param string $title Title.
72 * @param string $module Module name.
73 */
74 function twentytwenty_no_likes_heading( $heading, $title, $module ) {
75 if ( 'likes' === $module ) {
76 return '';
77 }
78
79 return $heading;
80 }
81 add_filter( 'jetpack_sharing_headline_html', 'twentytwenty_no_likes_heading', 10, 3 );
82
83 /**
84 * Disable Ads in post excerpts, that are used as intro on single post views.
85 */
86 add_filter( 'wordads_excerpt_disable', '__return_true' );
87
88 /**
89 * Add our compat CSS file for Infinite Scroll and custom widget stylings and such.
90 * Set the version equal to filemtime for development builds, and the JETPACK__VERSION for production
91 * or skip it entirely for wpcom.
92 */
93 function twentytwenty_enqueue_jetpack_style() {
94 $version = Jetpack::is_development_version()
95 ? filemtime( JETPACK__PLUGIN_DIR . 'modules/theme-tools/compat/twentytwenty.css' )
96 : JETPACK__VERSION;
97
98 wp_enqueue_style( 'twentytwenty-jetpack', plugins_url( 'twentytwenty.css', __FILE__ ), array(), $version );
99 wp_style_add_data( 'twentytwenty-jetpack', 'rtl', 'replace' );
100 }
101 add_action( 'wp_enqueue_scripts', 'twentytwenty_enqueue_jetpack_style' );
102
103 /**
104 * Add inline custom CSS with custom accent color if there is any set.
105 */
106 function twentytwenty_infinity_accent_color_css() {
107 $color_info = get_theme_mod( 'accent_accessible_colors' );
108
109 // Bail early if no custom color was set.
110 if (
111 'custom' !== get_theme_mod( 'accent_hue_active' )
112 || empty( $color_info )
113 ) {
114 return;
115 }
116
117 $custom_css = sprintf(
118 '
119 .infinite-scroll #site-content #infinite-handle span button,
120 .infinite-scroll #site-content #infinite-handle span button:hover,
121 .infinite-scroll #site-content #infinite-handle span button:focus {
122 background: %1$s;
123 color: %2$s;
124 }
125 #site-content .entry-content div.sharedaddy h3.sd-title,
126 #site-content .entry-content h3.sd-title,
127 #site-content .entry-content #jp-relatedposts h3.jp-relatedposts-headline {
128 color: %3$s;
129 }
130 ',
131 $color_info['content']['accent'],
132 $color_info['content']['background'] ?? '#fff',
133 $color_info['content']['secondary']
134 );
135
136 // Add our custom style to the existing Twenty Twenty CSS compat file.
137 wp_add_inline_style( 'twentytwenty-jetpack', $custom_css );
138 }
139 add_action( 'wp_enqueue_scripts', 'twentytwenty_infinity_accent_color_css' );
140
141 /**
142 * Load AMP theme specific hooks for infinite scroll.
143 *
144 * @return void
145 */
146 function amp_twentytwenty_infinite_scroll_render_hooks() {
147 add_filter( 'jetpack_amp_infinite_footers', 'twentytwenty_amp_infinite_footers', 10, 2 );
148 add_filter( 'jetpack_amp_infinite_output', 'twentytwenty_amp_infinite_output' );
149 add_filter( 'jetpack_amp_infinite_separator', 'twentytwenty_amp_infinite_separator' );
150 add_filter( 'jetpack_amp_infinite_older_posts', 'twentytwenty_amp_infinite_older_posts' );
151 }
152
153 /**
154 * Get the theme specific footers.
155 *
156 * @param array $footers The footers of the themes.
157 * @param string $buffer Contents of the output buffer.
158 *
159 * @return mixed
160 */
161 function twentytwenty_amp_infinite_footers( $footers, $buffer ) {
162 // Collect the footer wrapper.
163 preg_match(
164 '/<div class="footer-nav-widgets-wrapper.*<!-- .footer-nav-widgets-wrapper -->/s',
165 $buffer,
166 $footer
167 );
168 $footers[] = reset( $footer );
169
170 // Collect the footer wrapper.
171 preg_match(
172 '/<footer id="site-footer".*<!-- #site-footer -->/s',
173 $buffer,
174 $footer
175 );
176 $footers[] = reset( $footer );
177
178 return $footers;
179 }
180
181 /**
182 * Hide and remove various elements from next page load.
183 *
184 * @param string $buffer Contents of the output buffer.
185 *
186 * @return string
187 */
188 function twentytwenty_amp_infinite_output( $buffer ) {
189 // Hide site header on next page load.
190 $buffer = preg_replace(
191 '/id="site-header"/',
192 '$0 next-page-hide',
193 $buffer
194 );
195
196 // Hide pagination on next page load.
197 $buffer = preg_replace(
198 '/class=".*pagination-wrapper.*"/',
199 '$0 next-page-hide hidden',
200 $buffer
201 );
202
203 // Remove the footer as it will be added back to amp next page footer.
204 $buffer = preg_replace(
205 '/<div class="footer-nav-widgets-wrapper.*<!-- .footer-nav-widgets-wrapper -->/s',
206 '',
207 $buffer
208 );
209
210 // Remove the footer as it will be added back to amp next page footer.
211 $buffer = preg_replace(
212 '/<footer id="site-footer".*<!-- #site-footer -->/s',
213 '',
214 $buffer
215 );
216
217 return $buffer;
218 }
219
220 /**
221 * Filter the AMP infinite scroll separator
222 *
223 * @return string
224 */
225 function twentytwenty_amp_infinite_separator() {
226 ob_start();
227 ?>
228 <hr class="post-separator styled-separator is-style-wide section-inner" aria-hidden="true">
229 <?php
230 return ob_get_clean();
231 }
232
233 /**
234 * Filter the AMP infinite scroll older posts button
235 *
236 * @return string
237 */
238 function twentytwenty_amp_infinite_older_posts() {
239 ob_start();
240 ?>
241 <div id="infinite-handle" class="read-more-button-wrap">
242 <span>
243 <a href="{{url}}" class="more-link" rel="amphtml">
244 <span class="faux-button">
245 <?php esc_html_e( 'Older posts', 'jetpack' ); ?>
246 </span>
247 </a>
248 </span>
249 </div>
250 <?php
251 return ob_get_clean();
252 }
253
254