/var/www/html/wp-content/plugins/woocommerce/src/Blocks/Templates/ClassicTemplatesCompatibility.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
namespace Automattic\WooCommerce\Blocks\Templates;

use 
Automattic\WooCommerce\Blocks\Assets\AssetDataRegistry;

/**
 * ClassicTemplatesCompatibility class.
 *
 * To bridge the gap on compatibility with widget blocks and classic PHP core templates.
 *
 * @internal
 */
class ClassicTemplatesCompatibility {

    
/**
     * Instance of the asset data registry.
     *
     * @var AssetDataRegistry
     */
    
protected $asset_data_registry;

    
/**
     * Constructor.
     *
     * @param AssetDataRegistry $asset_data_registry Instance of the asset data registry.
     */
    
public function __constructAssetDataRegistry $asset_data_registry ) {
        
$this->asset_data_registry $asset_data_registry;
        
$this->init();
    }

    
/**
     * Initialization method.
     */
    
protected function init() { // phpcs:ignore WooCommerce.Functions.InternalInjectionMethod.MissingPublic
        
if ( ! wc_current_theme_is_fse_theme() ) {
            
add_action'template_redirect', array( $this'set_classic_template_data' ) );
            
// We need to set this data on the widgets screen so the filters render previews.
            
add_action'load-widgets.php', array( $this'set_filterable_product_data' ) );
        }
    }

    
/**
     * Executes the methods which set the necessary data needed for filter blocks to work correctly as widgets in Classic templates.
     *
     * @return void
     */
    
public function set_classic_template_data() {
        
$this->set_filterable_product_data();
        
$this->set_php_template_data();
    }

    
/**
     * This method passes the value `has_filterable_products` to the front-end for product archive pages,
     * so that widget product filter blocks are aware of the context they are in and can render accordingly.
     *
     * @return void
     */
    
public function set_filterable_product_data() {
        global 
$pagenow;

        if ( 
is_shop() || is_product_taxonomy() || 'widgets.php' === $pagenow ) {
            
$this->asset_data_registry->add'hasFilterableProducts'true );
        }
    }

    
/**
     * This method passes the value `is_rendering_php_template` to the front-end of Classic themes,
     * so that widget product filter blocks are aware of how to filter the products.
     *
     * This data only matters on WooCommerce product archive pages.
     * On non-archive pages the merchant could be using the All Products block which is not a PHP template.
     *
     * @return void
     */
    
public function set_php_template_data() {
        if ( 
is_shop() || is_product_taxonomy() ) {
            
$this->asset_data_registry->add'isRenderingPhpTemplate'true );
        }
    }
}