Commit 8bfc1083018 for woocommerce
commit 8bfc1083018526c9ee494369fd1d7f256b297476
Author: Karol Manijak <20098064+kmanijak@users.noreply.github.com>
Date: Wed Jul 22 14:46:31 2026 +0200
Restore rel key in loop add-to-cart filter arguments (#66856)
* Restore loop add-to-cart rel filter compatibility
* Add changelog comment for rel filter compatibility
diff --git a/plugins/woocommerce/changelog/fix-loop-add-to-cart-rel-compat b/plugins/woocommerce/changelog/fix-loop-add-to-cart-rel-compat
new file mode 100644
index 00000000000..c26447e74d6
--- /dev/null
+++ b/plugins/woocommerce/changelog/fix-loop-add-to-cart-rel-compat
@@ -0,0 +1,3 @@
+Significance: patch
+Type: fix
+Comment: This is a compatibility follow-up to #66743. The user-facing change is already covered by its existing changelog entry.
diff --git a/plugins/woocommerce/includes/wc-template-functions.php b/plugins/woocommerce/includes/wc-template-functions.php
index 5d9b60ffe36..c2d95781cc8 100644
--- a/plugins/woocommerce/includes/wc-template-functions.php
+++ b/plugins/woocommerce/includes/wc-template-functions.php
@@ -1461,6 +1461,7 @@ if ( ! function_exists( 'woocommerce_template_loop_add_to_cart' ) ) {
'data-product_id' => $product->get_id(),
'data-product_sku' => $product->get_sku(),
'aria-label' => $product->add_to_cart_description(),
+ 'rel' => '',
);
if ( $product->get_permalink() !== $product->add_to_cart_url() ) {
diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/ProductButton.php b/plugins/woocommerce/src/Blocks/BlockTypes/ProductButton.php
index 4f6f0f92839..e865ec849f4 100644
--- a/plugins/woocommerce/src/Blocks/BlockTypes/ProductButton.php
+++ b/plugins/woocommerce/src/Blocks/BlockTypes/ProductButton.php
@@ -168,6 +168,7 @@ class ProductButton extends AbstractBlock {
$add_to_cart_url = $product->add_to_cart_url();
$attributes = array(
'href' => esc_url( $add_to_cart_url ),
+ 'rel' => '',
);
if ( $product->get_permalink() !== $add_to_cart_url ) {
diff --git a/plugins/woocommerce/tests/php/includes/wc-template-functions-test.php b/plugins/woocommerce/tests/php/includes/wc-template-functions-test.php
index 82f729cb421..4719fbc1473 100644
--- a/plugins/woocommerce/tests/php/includes/wc-template-functions-test.php
+++ b/plugins/woocommerce/tests/php/includes/wc-template-functions-test.php
@@ -179,7 +179,30 @@ class WC_Template_Functions_Tests extends \WC_Unit_Test_Case {
$markup = $this->render_loop_add_to_cart( $product );
$this->assertStringContainsString( 'href="' . esc_url( $product->get_permalink() ) . '"', $markup );
- $this->assertStringNotContainsString( 'rel="nofollow"', $markup );
+ $this->assertStringContainsString( 'rel=""', $markup );
+ }
+
+ /**
+ * @testdox Loop button filter arguments retain an empty rel attribute for product permalink links.
+ */
+ public function test_loop_button_product_permalink_filter_args_include_empty_rel(): void {
+ $product = WC_Helper_Product::create_variation_product();
+ $filtered_args = null;
+ $filter = static function ( array $args ) use ( &$filtered_args ): array {
+ $filtered_args = $args;
+ return $args;
+ };
+
+ add_filter( 'woocommerce_loop_add_to_cart_args', $filter );
+ try {
+ $this->render_loop_add_to_cart( $product );
+ } finally {
+ remove_filter( 'woocommerce_loop_add_to_cart_args', $filter );
+ }
+
+ $this->assertIsArray( $filtered_args );
+ $this->assertArrayHasKey( 'rel', $filtered_args['attributes'] );
+ $this->assertSame( '', $filtered_args['attributes']['rel'] );
}
/**
diff --git a/plugins/woocommerce/tests/php/src/Blocks/BlockTypes/ProductButton.php b/plugins/woocommerce/tests/php/src/Blocks/BlockTypes/ProductButton.php
index 2a385f3d04e..870ea066977 100644
--- a/plugins/woocommerce/tests/php/src/Blocks/BlockTypes/ProductButton.php
+++ b/plugins/woocommerce/tests/php/src/Blocks/BlockTypes/ProductButton.php
@@ -65,7 +65,30 @@ class ProductButton extends \WP_UnitTestCase {
$markup = $this->render_product_button( $product );
$this->assertStringContainsString( 'href="' . esc_url( $product->get_permalink() ) . '"', $markup );
- $this->assertStringNotContainsString( 'rel="nofollow"', $markup );
+ $this->assertStringContainsString( 'rel=""', $markup );
+ }
+
+ /**
+ * @testdox Product Button filter arguments retain an empty rel attribute for product permalink links.
+ */
+ public function test_product_permalink_filter_args_include_empty_rel(): void {
+ $product = WC_Helper_Product::create_variation_product();
+ $filtered_args = null;
+ $filter = static function ( array $args ) use ( &$filtered_args ): array {
+ $filtered_args = $args;
+ return $args;
+ };
+
+ add_filter( 'woocommerce_loop_add_to_cart_args', $filter );
+ try {
+ $this->render_product_button( $product );
+ } finally {
+ remove_filter( 'woocommerce_loop_add_to_cart_args', $filter );
+ }
+
+ $this->assertIsArray( $filtered_args );
+ $this->assertArrayHasKey( 'rel', $filtered_args['attributes'] );
+ $this->assertSame( '', $filtered_args['attributes']['rel'] );
}
/**