Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 103
0.00% covered (danger)
0.00%
0 / 11
CRAP
n/a
0 / 0
twentytwenty_jetpack_setup
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
2
twentytwenty_infinite_scroll_render
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
twentytwenty_no_sharing_on_excerpts
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
12
twentytwenty_no_likes_heading
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
twentytwenty_enqueue_jetpack_style
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
twentytwenty_infinity_accent_color_css
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
12
amp_twentytwenty_infinite_scroll_render_hooks
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
twentytwenty_amp_infinite_footers
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
2
twentytwenty_amp_infinite_output
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
2
twentytwenty_amp_infinite_separator
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
twentytwenty_amp_infinite_older_posts
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2/**
3 * Jetpack Compatibility File
4 * See: https://jetpack.com/
5 *
6 * @package automattic/jetpack
7 */
8
9if ( ! 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 */
20function 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}
38add_action( 'after_setup_theme', 'twentytwenty_jetpack_setup' );
39
40/**
41 * Custom render function for Infinite Scroll.
42 */
43function 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 */
54function 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}
65add_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 */
74function twentytwenty_no_likes_heading( $heading, $title, $module ) {
75    if ( 'likes' === $module ) {
76        return '';
77    }
78
79    return $heading;
80}
81add_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 */
86add_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 */
93function 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}
101add_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 */
106function 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}
139add_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 */
146function 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 */
161function 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 */
188function 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 */
225function 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 */
238function 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