PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3
Jetpack – WP Security, Backup, Speed, & Growth v16.3
16.3 16.3-beta 16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 16.2-beta 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 All 508 releases
← All changes | modules/theme-tools/compat/twentytwenty.php +253 -0 16.2-beta → 16.3 View file →
@@ -1,0 +1,253 @@
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 +