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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
<?php declare( strict_types=1 ); namespace Automattic\WooCommerce\Blocks;
use Automattic\WooCommerce\Admin\Features\Features; use Automattic\WooCommerce\Blocks\Utils\BlockTemplateUtils; use Automattic\WooCommerce\Blocks\Templates\AbstractTemplate; use Automattic\WooCommerce\Blocks\Templates\AbstractTemplatePart; use Automattic\WooCommerce\Blocks\Templates\MiniCartTemplate; use Automattic\WooCommerce\Blocks\Templates\CartTemplate; use Automattic\WooCommerce\Blocks\Templates\CheckoutTemplate; use Automattic\WooCommerce\Blocks\Templates\CheckoutHeaderTemplate; use Automattic\WooCommerce\Blocks\Templates\ComingSoonTemplate; use Automattic\WooCommerce\Blocks\Templates\OrderConfirmationTemplate; use Automattic\WooCommerce\Blocks\Templates\ProductAttributeTemplate; use Automattic\WooCommerce\Blocks\Templates\ProductBrandTemplate; use Automattic\WooCommerce\Blocks\Templates\ProductCatalogTemplate; use Automattic\WooCommerce\Blocks\Templates\ProductCategoryTemplate; use Automattic\WooCommerce\Blocks\Templates\ProductTagTemplate; use Automattic\WooCommerce\Blocks\Templates\ProductSearchResultsTemplate; use Automattic\WooCommerce\Blocks\Templates\SingleProductTemplate; use Automattic\WooCommerce\Blocks\Templates\SimpleProductAddToCartWithOptionsTemplate; use Automattic\WooCommerce\Blocks\Templates\ExternalProductAddToCartWithOptionsTemplate; use Automattic\WooCommerce\Blocks\Templates\VariableProductAddToCartWithOptionsTemplate; use Automattic\WooCommerce\Blocks\Templates\GroupedProductAddToCartWithOptionsTemplate; use Automattic\WooCommerce\Enums\ProductType;
/** * BlockTemplatesRegistry class. * * @internal */ class BlockTemplatesRegistry {
/** * The array of registered templates. * * @var AbstractTemplate[]|AbstractTemplatePart[] */ private $templates = array();
/** * Initialization method. */ public function init() { if ( BlockTemplateUtils::supports_block_templates( 'wp_template' ) ) { $templates = array( ProductCatalogTemplate::SLUG => new ProductCatalogTemplate(), ProductCategoryTemplate::SLUG => new ProductCategoryTemplate(), ProductTagTemplate::SLUG => new ProductTagTemplate(), ProductAttributeTemplate::SLUG => new ProductAttributeTemplate(), ProductBrandTemplate::SLUG => new ProductBrandTemplate(), ProductSearchResultsTemplate::SLUG => new ProductSearchResultsTemplate(), CartTemplate::SLUG => new CartTemplate(), CheckoutTemplate::SLUG => new CheckoutTemplate(), OrderConfirmationTemplate::SLUG => new OrderConfirmationTemplate(), SingleProductTemplate::SLUG => new SingleProductTemplate(), ); } else { $templates = array(); } if ( Features::is_enabled( 'launch-your-store' ) ) { $templates[ ComingSoonTemplate::SLUG ] = new ComingSoonTemplate(); } if ( BlockTemplateUtils::supports_block_templates( 'wp_template_part' ) ) { $template_parts = array( MiniCartTemplate::SLUG => new MiniCartTemplate(), CheckoutHeaderTemplate::SLUG => new CheckoutHeaderTemplate(), ); if ( wp_is_block_theme() ) { $product_types = wc_get_product_types(); if ( count( $product_types ) > 0 ) { add_filter( 'default_wp_template_part_areas', array( $this, 'register_add_to_cart_with_options_template_part_area' ), 10, 1 ); if ( array_key_exists( ProductType::SIMPLE, $product_types ) ) { $template_parts[ SimpleProductAddToCartWithOptionsTemplate::SLUG ] = new SimpleProductAddToCartWithOptionsTemplate(); } if ( array_key_exists( ProductType::EXTERNAL, $product_types ) ) { $template_parts[ ExternalProductAddToCartWithOptionsTemplate::SLUG ] = new ExternalProductAddToCartWithOptionsTemplate(); } if ( array_key_exists( ProductType::VARIABLE, $product_types ) ) { $template_parts[ VariableProductAddToCartWithOptionsTemplate::SLUG ] = new VariableProductAddToCartWithOptionsTemplate(); } if ( array_key_exists( ProductType::GROUPED, $product_types ) ) { $template_parts[ GroupedProductAddToCartWithOptionsTemplate::SLUG ] = new GroupedProductAddToCartWithOptionsTemplate(); } } } } else { $template_parts = array(); }
// Init all templates. foreach ( $templates as $template ) { $template->init();
// Taxonomy templates are registered automatically by WordPress and // are made available through the Add Template menu. if ( ! $template->is_taxonomy_template ) { $directory = BlockTemplateUtils::get_templates_directory( 'wp_template' ); $template_file_path = $directory . '/' . $template::SLUG . '.html'; register_block_template( 'woocommerce//' . $template::SLUG, array( 'title' => $template->get_template_title(), 'description' => $template->get_template_description(), // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents 'content' => file_get_contents( $template_file_path ), ) ); } }
foreach ( $template_parts as $template_part ) { $template_part->init(); }
$this->templates = array_merge( $templates, $template_parts ); }
/** * Add Add to Cart + Options to the default template part areas. * * @param array $default_area_definitions An array of supported area objects. * @return array The supported template part areas including the Add to Cart + Options one. */ public function register_add_to_cart_with_options_template_part_area( $default_area_definitions ) { $add_to_cart_with_options_template_part_area = array( 'area' => 'add-to-cart-with-options', 'label' => __( 'Add to Cart + Options', 'woocommerce' ), 'description' => __( 'The Add to Cart + Options templates allow defining a different layout for each product type.', 'woocommerce' ), 'icon' => 'add-to-cart-with-options', 'area_tag' => 'add-to-cart-with-options', ); return array_merge( $default_area_definitions, array( $add_to_cart_with_options_template_part_area ) ); }
/** * Returns the template matching the slug * * @param string $template_slug Slug of the template to retrieve. * * @return AbstractTemplate|AbstractTemplatePart|null */ public function get_template( $template_slug ) { if ( array_key_exists( $template_slug, $this->templates ) ) { $registered_template = $this->templates[ $template_slug ]; return $registered_template; } return null; } }
|