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 );
+	}
 }