Commit 36b99fe4036 for woocommerce

commit 36b99fe4036758192146222b66f83f157c60c25a
Author: Jorge A. Torres <jorge.torres@automattic.com>
Date:   Thu Aug 27 20:06:46 2026 +0100

    Only treat address fields as hidden when the flag is exactly true (#68111)

diff --git a/plugins/woocommerce/includes/class-wc-checkout.php b/plugins/woocommerce/includes/class-wc-checkout.php
index b24e632e3a9..d7b60a72047 100644
--- a/plugins/woocommerce/includes/class-wc-checkout.php
+++ b/plugins/woocommerce/includes/class-wc-checkout.php
@@ -909,7 +909,7 @@ class WC_Checkout {
 				if ( ! isset( $data[ $key ] ) ) {
 					continue;
 				}
-				$required    = ! empty( $field['required'] ) && empty( $field['hidden'] );
+				$required    = ! empty( $field['required'] ) && true !== ( $field['hidden'] ?? false );
 				$format      = array_filter( isset( $field['validate'] ) ? (array) $field['validate'] : array() );
 				$field_label = isset( $field['label'] ) ? $field['label'] : '';

diff --git a/plugins/woocommerce/includes/class-wc-form-handler.php b/plugins/woocommerce/includes/class-wc-form-handler.php
index d945c5a5b57..f47c54ce4e5 100644
--- a/plugins/woocommerce/includes/class-wc-form-handler.php
+++ b/plugins/woocommerce/includes/class-wc-form-handler.php
@@ -195,7 +195,7 @@ class WC_Form_Handler {
 			$value = apply_filters( 'woocommerce_process_myaccount_field_' . $key, $value );

 			// Validation: Required fields.
-			if ( ! empty( $field['required'] ) && empty( $field['hidden'] ) && empty( $value ) ) {
+			if ( ! empty( $field['required'] ) && true !== ( $field['hidden'] ?? false ) && empty( $value ) ) {
 				/* translators: %s: Field name. */
 				wc_add_notice( sprintf( __( '%s is a required field.', 'woocommerce' ), $field['label'] ), 'error', array( 'id' => $key ) );
 			}
diff --git a/plugins/woocommerce/tests/php/includes/class-wc-checkout-test.php b/plugins/woocommerce/tests/php/includes/class-wc-checkout-test.php
index 07db9678c6e..f6f9f4f01fe 100644
--- a/plugins/woocommerce/tests/php/includes/class-wc-checkout-test.php
+++ b/plugins/woocommerce/tests/php/includes/class-wc-checkout-test.php
@@ -217,14 +217,17 @@ class WC_Checkout_Test extends \WC_Unit_Test_Case {
 	}

 	/**
-	 * @testdox 'validate_posted_data' skips the required check for fields hidden via the country locale.
+	 * @testdox 'validate_posted_data' skips the required check only for fields whose locale hidden flag is exactly true.
 	 *
-	 * @testWith [true]
-	 *           [false]
+	 * @testWith [true, false]
+	 *           [false, true]
+	 *           ["yes", true]
+	 *           [1, true]
 	 *
-	 * @param bool $hidden Whether the locale marks the postcode field as hidden.
+	 * @param mixed $hidden                Value of the locale's hidden flag for the postcode field.
+	 * @param bool  $expect_required_error Whether a required-field error is expected.
 	 */
-	public function test_validate_posted_data_skips_required_check_for_hidden_fields( $hidden ) {
+	public function test_validate_posted_data_skips_required_check_for_hidden_fields( $hidden, $expect_required_error ) {
 		$locale_filter = function ( $locale ) use ( $hidden ) {
 			$locale['ES']['postcode']['hidden'] = $hidden;
 			return $locale;
@@ -243,10 +246,10 @@ class WC_Checkout_Test extends \WC_Unit_Test_Case {
 		$this->sut->validate_posted_data( $data, $errors );

 		$required_error = $errors->get_error_message( 'billing_postcode_required' );
-		if ( $hidden ) {
-			$this->assertEmpty( $required_error, 'Hidden fields should not trigger a required-field error.' );
+		if ( $expect_required_error ) {
+			$this->assertNotEmpty( $required_error, 'Fields not hidden with exactly true should still trigger a required-field error.' );
 		} else {
-			$this->assertNotEmpty( $required_error, 'Visible required fields should still trigger a required-field error.' );
+			$this->assertEmpty( $required_error, 'Hidden fields should not trigger a required-field error.' );
 		}
 	}