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',