Commit e168c47a61 for woocommerce
commit e168c47a61334cffb6450ad3b2d537430d482e4e
Author: Ahmar Zaidi <71930390+AhmarZaidi@users.noreply.github.com>
Date: Thu Apr 24 14:36:38 2025 +0530
Fix password-protected product layout in blockified templates shows unnecessary product title and product excerpt (#57437)
* fix: remove password protected product title and excerpt
* add: changelog entry
* add: check to remove empty inner blocks
* update: hide logic for related products pattern
* update: test for single product template
---------
Co-authored-by: Vladimir Reznichenko <kalessil@gmail.com>
diff --git a/plugins/woocommerce/changelog/fix-50391 b/plugins/woocommerce/changelog/fix-50391
new file mode 100644
index 0000000000..bb89f6e86d
--- /dev/null
+++ b/plugins/woocommerce/changelog/fix-50391
@@ -0,0 +1,4 @@
+Significance: patch
+Type: update
+
+Fixed issue where the blockified template was showing the post title and excerpt for password-protected products.
diff --git a/plugins/woocommerce/src/Blocks/Templates/SingleProductTemplate.php b/plugins/woocommerce/src/Blocks/Templates/SingleProductTemplate.php
index 839ed177e0..e1574e206e 100644
--- a/plugins/woocommerce/src/Blocks/Templates/SingleProductTemplate.php
+++ b/plugins/woocommerce/src/Blocks/Templates/SingleProductTemplate.php
@@ -141,11 +141,12 @@ class SingleProductTemplate extends AbstractTemplate {
private static function replace_first_single_product_template_block_with_password_form( $parsed_blocks, $is_already_replaced ) {
// We want to replace the first single product template block with the password form. We also want to remove all other single product template blocks.
// This array doesn't contains all the blocks. For example, it missing the breadcrumbs blocks: it doesn't make sense replace the breadcrumbs with the password form.
- $single_product_template_blocks = array( 'woocommerce/product-image-gallery', 'woocommerce/product-details', 'woocommerce/add-to-cart-form', 'woocommerce/product-meta', 'woocommerce/product-rating', 'woocommerce/product-price', 'woocommerce/related-products' );
+ $single_product_template_blocks = array( 'woocommerce/product-image-gallery', 'woocommerce/product-details', 'woocommerce/add-to-cart-form', 'woocommerce/product-meta', 'woocommerce/product-rating', 'woocommerce/product-price', 'woocommerce/related-products', 'woocommerce/add-to-cart-with-options', 'woocommerce/product-gallery', 'woocommerce/blockified-product-details', 'woocommerce/product-collection', 'core/post-title', 'core/post-excerpt' );
+
return array_reduce(
$parsed_blocks,
function ( $carry, $block ) use ( $single_product_template_blocks ) {
- if ( in_array( $block['blockName'], $single_product_template_blocks, true ) ) {
+ if ( in_array( $block['blockName'], $single_product_template_blocks, true ) || ( 'core/pattern' === $block['blockName'] && isset( $block['attrs']['slug'] ) && 'woocommerce-blocks/related-products' === $block['attrs']['slug'] ) ) {
if ( $carry['is_already_replaced'] ) {
return array(
'blocks' => $carry['blocks'],
@@ -203,6 +204,15 @@ class SingleProductTemplate extends AbstractTemplate {
$block['innerBlocks'] = $new_inner_blocks;
$block['innerContent'] = $new_inner_contents;
+ if ( count( $new_inner_blocks ) === 0 ) {
+ return array(
+ 'blocks' => $carry['blocks'],
+ 'html_block' => null,
+ 'removed' => true,
+ 'is_already_replaced' => $carry['is_already_replaced'],
+ );
+ }
+
return array(
'blocks' => array_merge( $carry['blocks'], array( $block ) ),
'html_block' => null,
diff --git a/plugins/woocommerce/tests/php/src/Blocks/Templates/SingleProductTemplateTests.php b/plugins/woocommerce/tests/php/src/Blocks/Templates/SingleProductTemplateTests.php
index 01685adfc0..168cde2264 100644
--- a/plugins/woocommerce/tests/php/src/Blocks/Templates/SingleProductTemplateTests.php
+++ b/plugins/woocommerce/tests/php/src/Blocks/Templates/SingleProductTemplateTests.php
@@ -396,12 +396,6 @@ class SingleProductTemplateTests extends WP_UnitTestCase {
<!-- wp:html -->%s<!-- /wp:html -->
</div>
<!-- /wp:column -->
- <!-- wp:column -->
- <div class="wp-block-column">
- <!-- wp:post-title {"level": 1, "__woocommerceNamespace":"woocommerce/product-query/product-title"} /-->
- <!-- wp:post-excerpt {"__woocommerceNamespace":"woocommerce/product-query/product-summary", "excerptLength":100} /-->
- </div>
- <!-- /wp:column -->
</div>
<!-- /wp:columns -->
</div>