Commit a27184b5f16 for woocommerce
commit a27184b5f165de3c55f0a6c531db0b9601bd36d7
Author: SH Sajal Chowdhury <72102985+shsajalchowdhury@users.noreply.github.com>
Date: Mon May 4 23:22:09 2026 +0600
Fix fatal TypeError when product attribute is named 'variation' (#64550)
* Fix fatal error when product attribute is named 'variation'
* test: add regression test for get_permalink() with non-array variation
---------
Co-authored-by: Brandon Kraft <public@brandonkraft.com>
diff --git a/plugins/woocommerce/includes/class-wc-product-variation.php b/plugins/woocommerce/includes/class-wc-product-variation.php
index 567cd9694ec..8bdd58f9aaa 100644
--- a/plugins/woocommerce/includes/class-wc-product-variation.php
+++ b/plugins/woocommerce/includes/class-wc-product-variation.php
@@ -170,7 +170,7 @@ class WC_Product_Variation extends WC_Product_Simple {
$data_keys = array_map( 'wc_variation_attribute_name', wp_list_pluck( $item_object['item_meta_array'], 'key' ) );
$data_values = wp_list_pluck( $item_object['item_meta_array'], 'value' );
$data = array_intersect_key( array_combine( $data_keys, $data_values ), $this->get_variation_attributes() );
- } elseif ( ! empty( $item_object['variation'] ) ) {
+ } elseif ( ! empty( $item_object['variation'] ) && is_array( $item_object['variation'] ) ) {
$data = $item_object['variation'];
} else {
$data = $this->get_variation_attributes();
diff --git a/plugins/woocommerce/tests/php/includes/class-wc-product-variation-test.php b/plugins/woocommerce/tests/php/includes/class-wc-product-variation-test.php
index 6035a679ca7..c782c177f8e 100644
--- a/plugins/woocommerce/tests/php/includes/class-wc-product-variation-test.php
+++ b/plugins/woocommerce/tests/php/includes/class-wc-product-variation-test.php
@@ -109,4 +109,16 @@ class WC_Product_Variation_Test extends WC_Unit_Test_Case {
$this->variation->set_cogs_value( $defined_value );
$this->assertEquals( $expected_value, $this->variation->get_cogs_total_value() );
}
+
+ /**
+ * Ensure get_permalink() handles non-array variation data without fataling.
+ *
+ * @testdox get_permalink() returns a URL without fataling when $item_object['variation'] is a string rather than the expected variation-attributes array.
+ */
+ public function test_get_permalink_handles_non_array_variation_value() {
+ $url = $this->variation->get_permalink( array( 'variation' => 'some-string-value' ) );
+
+ $this->assertIsString( $url );
+ $this->assertNotEmpty( $url );
+ }
}