Commit c87c3d58ad7 for woocommerce

commit c87c3d58ad79d545b6b6caecd6a62484cf99d371
Author: Wesley Rosa <wesleyjrosa@gmail.com>
Date:   Tue Jun 30 11:39:57 2026 -0300

    Add DimensionUnit enum class for woocommerce_dimension_unit option values (#66064)

    * Revert "Revert "Add DimensionUnit enum class for woocommerce_dimension_unit option values""

    * Update DimensionUnit @since tag to target version 11.0.0

    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

    * Address review feedback on DimensionUnit enum

    - Add DimensionUnit::get_all() and use it in the V4 settings controller
    - Revert DimensionUnit adoption in legacy includes/ to avoid autoloader-race risk
    - Fix enum doc-blocks to use singular form matching constant names

    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

    ---------

    Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

diff --git a/plugins/woocommerce/changelog/add-dimension-unit-enum b/plugins/woocommerce/changelog/add-dimension-unit-enum
new file mode 100644
index 00000000000..976c8b077f8
--- /dev/null
+++ b/plugins/woocommerce/changelog/add-dimension-unit-enum
@@ -0,0 +1,4 @@
+Significance: minor
+Type: add
+
+Add DimensionUnit enum class for woocommerce_dimension_unit option values and implement it across the codebase.
diff --git a/plugins/woocommerce/src/Enums/DimensionUnit.php b/plugins/woocommerce/src/Enums/DimensionUnit.php
new file mode 100644
index 00000000000..cba1bb85b46
--- /dev/null
+++ b/plugins/woocommerce/src/Enums/DimensionUnit.php
@@ -0,0 +1,64 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace Automattic\WooCommerce\Enums;
+
+/**
+ * Enum class for the possible values of the 'woocommerce_dimension_unit' option.
+ *
+ * @since 11.0.0
+ */
+final class DimensionUnit {
+	/**
+	 * Meter.
+	 *
+	 * @var string
+	 */
+	public const METER = 'm';
+
+	/**
+	 * Centimeter.
+	 *
+	 * @var string
+	 */
+	public const CENTIMETER = 'cm';
+
+	/**
+	 * Millimeter.
+	 *
+	 * @var string
+	 */
+	public const MILLIMETER = 'mm';
+
+	/**
+	 * Inch.
+	 *
+	 * @var string
+	 */
+	public const INCH = 'in';
+
+	/**
+	 * Yard.
+	 *
+	 * @var string
+	 */
+	public const YARD = 'yd';
+
+	/**
+	 * Returns all dimension unit values defined in this class.
+	 *
+	 * @since 11.0.0
+	 *
+	 * @return string[]
+	 */
+	public static function get_all(): array {
+		return array(
+			self::METER,
+			self::CENTIMETER,
+			self::MILLIMETER,
+			self::INCH,
+			self::YARD,
+		);
+	}
+}
diff --git a/plugins/woocommerce/src/Enums/README.md b/plugins/woocommerce/src/Enums/README.md
index 9bbc90302b9..27c1981af32 100644
--- a/plugins/woocommerce/src/Enums/README.md
+++ b/plugins/woocommerce/src/Enums/README.md
@@ -8,6 +8,7 @@ The enum classes make it easier to reference string values and avoid typos. They

 - [CatalogVisibility](./CatalogVisibility.php) - Enumerates the possible catalog visibility options for a product.
 - [DefaultCustomerAddress](./DefaultCustomerAddress.php) - Enumerates the possible values of the `woocommerce_default_customer_address` option.
+- [DimensionUnit](./DimensionUnit.php) - Enumerates the possible values of the `woocommerce_dimension_unit` option.
 - [OrderInternalStatus](./OrderInternalStatus.php) - Enumerates the possible internal statuses of an order (when stored in the database).
 - [OrderItemType](./OrderItemType.php) - Enumerates the possible types of an order line item.
 - [OrderStatus](./OrderStatus.php) - Enumerates the possible statuses of an order.
diff --git a/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Products/Controller.php b/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Products/Controller.php
index 3f952b8360d..31c7a09f5b3 100644
--- a/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Products/Controller.php
+++ b/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Products/Controller.php
@@ -12,11 +12,12 @@ declare(strict_types=1);

 namespace Automattic\WooCommerce\Internal\RestApi\Routes\V4\Products;

+use Automattic\WooCommerce\Enums\CatalogVisibility;
+use Automattic\WooCommerce\Enums\DimensionUnit;
 use Automattic\WooCommerce\Enums\ProductStatus;
 use Automattic\WooCommerce\Enums\ProductStockStatus;
 use Automattic\WooCommerce\Enums\ProductTaxStatus;
 use Automattic\WooCommerce\Enums\ProductType;
-use Automattic\WooCommerce\Enums\CatalogVisibility;
 use Automattic\WooCommerce\Enums\WeightUnit;
 use Automattic\WooCommerce\Internal\CostOfGoodsSold\CogsAwareRestControllerTrait;
 use Automattic\WooCommerce\Internal\Utilities\ProductUtil;
@@ -1458,7 +1459,7 @@ class Controller extends WC_REST_Products_V2_Controller {
 	 */
 	public function get_item_schema() {
 		$weight_unit_label    = I18nUtil::get_weight_unit_label( get_option( 'woocommerce_weight_unit', WeightUnit::KILOGRAM ) );
-		$dimension_unit_label = I18nUtil::get_dimensions_unit_label( get_option( 'woocommerce_dimension_unit', 'cm' ) );
+		$dimension_unit_label = I18nUtil::get_dimensions_unit_label( get_option( 'woocommerce_dimension_unit', DimensionUnit::CENTIMETER ) );
 		$schema               = array(
 			'$schema'    => 'http://json-schema.org/draft-04/schema#',
 			'title'      => $this->post_type,
diff --git a/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Settings/Products/Controller.php b/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Settings/Products/Controller.php
index bb5027945bb..90bdbc9f990 100644
--- a/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Settings/Products/Controller.php
+++ b/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Settings/Products/Controller.php
@@ -12,6 +12,7 @@ declare( strict_types=1 );
 namespace Automattic\WooCommerce\Internal\RestApi\Routes\V4\Settings\Products;

 use WP_Error;
+use Automattic\WooCommerce\Enums\DimensionUnit;
 use Automattic\WooCommerce\Enums\WeightUnit;
 use Automattic\WooCommerce\Internal\RestApi\Routes\V4\AbstractController;
 use Automattic\WooCommerce\Internal\RestApi\Routes\V4\Settings\Products\Schema\ProductSettingsSchema;
@@ -262,7 +263,7 @@ class Controller extends AbstractController {
 				 *
 				 * @param array $dimension_units Array of dimension unit strings.
 				 */
-				$valid_units = apply_filters( 'woocommerce_dimension_units', array( 'm', 'cm', 'mm', 'in', 'yd' ) );
+				$valid_units = apply_filters( 'woocommerce_dimension_units', DimensionUnit::get_all() );
 				if ( ! in_array( $value, $valid_units, true ) ) {
 					return new WP_Error(
 						'rest_invalid_param',