Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 6
100.00% covered (success)
100.00%
3 / 3
CRAP
n/a
0 / 0
jetpack_featured_images_remove_post_thumbnail
n/a
0 / 0
n/a
0 / 0
36
jetpack_is_product
n/a
0 / 0
n/a
0 / 0
2
jetpack_is_shop_page
n/a
0 / 0
n/a
0 / 0
4
1<?php
2/**
3 * Theme Tools: functions for Featured Images.
4 *
5 * @package automattic/jetpack
6 */
7
8if ( ! defined( 'ABSPATH' ) ) {
9    exit( 0 );
10}
11
12if ( ! function_exists( 'jetpack_featured_images_remove_post_thumbnail' ) ) {
13
14    /**
15     * The function to prevent for Featured Images to be displayed in a theme.
16     *
17     * @deprecated 13.9 Moved to Classic Theme Helper package.
18     * @param array  $metadata Post metadata.
19     * @param int    $object_id Post ID.
20     * @param string $meta_key Metadata key.
21     */
22    function jetpack_featured_images_remove_post_thumbnail( $metadata, $object_id, $meta_key ) {
23        _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
24        $opts = jetpack_featured_images_get_settings();
25
26        /**
27         * Allow featured images to be displayed at all times for specific CPTs.
28         *
29         * @module theme-tools
30         *
31         * @since 9.1.0
32         *
33         * @param array $excluded_post_types Array of excluded post types.
34         */
35        $excluded_post_types = apply_filters(
36            'jetpack_content_options_featured_image_exclude_cpt',
37            array( 'jp_pay_product' )
38        );
39
40        // Automatically return metadata for specific post types, when we don't want to hide the Featured Image.
41        if ( in_array( get_post_type( $object_id ), $excluded_post_types, true ) ) {
42            return $metadata;
43        }
44
45        // Return false if the archive option or singular option is unticked.
46        if (
47            ( true === $opts['archive']
48                && ( is_home() || is_archive() || is_search() )
49                && ! jetpack_is_shop_page()
50                && ! $opts['archive-option']
51                && ( isset( $meta_key )
52                && '_thumbnail_id' === $meta_key )
53                && in_the_loop()
54            )
55            || ( true === $opts['post']
56                && is_single()
57                && ! jetpack_is_product()
58                && ! $opts['post-option']
59                && ( isset( $meta_key )
60                && '_thumbnail_id' === $meta_key )
61                && in_the_loop()
62            )
63            || ( true === $opts['page']
64                && is_singular()
65                && is_page()
66                && ! $opts['page-option']
67                && ( isset( $meta_key )
68                && '_thumbnail_id' === $meta_key )
69                && in_the_loop()
70            )
71            || ( true === $opts['portfolio']
72                && post_type_exists( 'jetpack-portfolio' )
73                && is_singular( 'jetpack-portfolio' )
74                && ! $opts['portfolio-option']
75                && ( isset( $meta_key )
76                && '_thumbnail_id' === $meta_key )
77                && in_the_loop()
78            )
79        ) {
80
81            // Do not override thumbnail settings within blocks (eg. Latest Posts block).
82            $trace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace
83            foreach ( $trace as $frame ) {
84                if ( ! empty( $frame['class'] ) && class_exists( $frame['class'], false ) && is_a( $frame['class'], WP_Block::class, true ) ) {
85                        return $metadata;
86                }
87            }
88
89            return false;
90        } else {
91            return $metadata;
92        }
93    }
94    add_filter( 'get_post_metadata', 'jetpack_featured_images_remove_post_thumbnail', true, 3 );
95
96}
97
98if ( ! function_exists( 'jetpack_is_product' ) ) {
99
100    /**
101     * Check if we are in a WooCommerce Product in order to exclude it from the is_single check.
102     *
103     * @deprecated 13.9 Moved to Classic Theme Helper package.
104     */
105    function jetpack_is_product() {
106        _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
107        return ( function_exists( 'is_product' ) ) ? is_product() : false;
108    }
109
110}
111
112if ( ! function_exists( 'jetpack_is_shop_page' ) ) {
113
114    /**
115     * Check if we are in a WooCommerce Shop in order to exclude it from the is_archive check.
116     *
117     * @deprecated 13.9 Moved to Classic Theme Helper package.
118     */
119    function jetpack_is_shop_page() {
120        _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
121        // Check if WooCommerce is active first.
122        if ( ! class_exists( 'WooCommerce' ) ) {
123            return false;
124        }
125
126        global $wp_query;
127
128        $front_page_id        = get_option( 'page_on_front' );
129        $current_page_id      = $wp_query->get( 'page_id' );
130        $is_static_front_page = 'page' === get_option( 'show_on_front' );
131
132        if ( $is_static_front_page && $front_page_id === $current_page_id ) {
133            $is_shop_page = wc_get_page_id( 'shop' ) === $current_page_id;
134        } else {
135            $is_shop_page = is_shop();
136        }
137
138        return $is_shop_page;
139    }
140
141}