Commit 34a0f324099 for woocommerce

commit 34a0f324099da7eeb7712993f76be6d2aabedd36
Author: Wesley Rosa <wesleyjrosa@gmail.com>
Date:   Thu Apr 9 12:09:06 2026 -0300

    Add OrderItemType enum class and adopt it across the codebase (#63863)

    * Add OrderItemType enum class for WooCommerce line item types

    Co-authored-by: wjrosa <10187816+wjrosa@users.noreply.github.com>
    Agent-Logs-Url: https://github.com/wjrosa/woocommerce/sessions/8c722ad0-cb4d-4315-94ff-0c609f9354b9

    * Replace raw order item type strings with OrderItemType enum constants across src/

    Co-authored-by: wjrosa <10187816+wjrosa@users.noreply.github.com>
    Agent-Logs-Url: https://github.com/wjrosa/woocommerce/sessions/cd678828-7e57-48d9-a556-022005be84c4

    * Add changefile(s) from automation for the following project(s): woocommerce

    * Remove cache priming addition from Orders REST API controller

    * Remove unused OrderItemType import from Orders REST API controller

    * Address review feedback on OrderItemType enum adoption

    * Fix MDX compilation errors caused by HTML comments in docs

    * Revert "Fix MDX compilation errors caused by HTML comments in docs"

    This reverts commit 895c96aac0aafd4f9283b03abafe49d3eccc8526.

    ---------

    Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
    Co-authored-by: wjrosa <10187816+wjrosa@users.noreply.github.com>
    Co-authored-by: woocommercebot <woocommercebot@users.noreply.github.com>
    Co-authored-by: Vladimir Reznichenko <kalessil@gmail.com>
    Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>

diff --git a/plugins/woocommerce/changelog/63863-trunk b/plugins/woocommerce/changelog/63863-trunk
new file mode 100644
index 00000000000..be7cfb8b7cf
--- /dev/null
+++ b/plugins/woocommerce/changelog/63863-trunk
@@ -0,0 +1,4 @@
+Significance: minor
+Type: dev
+
+Introduces and implements constants for order item types in the WooCommerce plugin codebase.
\ No newline at end of file
diff --git a/plugins/woocommerce/src/Admin/API/Reports/Coupons/DataStore.php b/plugins/woocommerce/src/Admin/API/Reports/Coupons/DataStore.php
index f2d64dbd0ab..21fc3e3cf33 100644
--- a/plugins/woocommerce/src/Admin/API/Reports/Coupons/DataStore.php
+++ b/plugins/woocommerce/src/Admin/API/Reports/Coupons/DataStore.php
@@ -12,6 +12,7 @@ use Automattic\WooCommerce\Admin\API\Reports\DataStoreInterface;
 use Automattic\WooCommerce\Admin\API\Reports\TimeInterval;
 use Automattic\WooCommerce\Admin\API\Reports\SqlQuery;
 use Automattic\WooCommerce\Admin\API\Reports\Cache as ReportsCache;
+use Automattic\WooCommerce\Enums\OrderItemType;

 /**
  * API\Reports\Coupons\DataStore.
@@ -405,7 +406,7 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
 			)
 		);
 		$existing_items     = array_flip( $existing_items );
-		$coupon_items       = $order->get_items( 'coupon' );
+		$coupon_items       = $order->get_items( OrderItemType::COUPON );
 		$coupon_items_count = count( $coupon_items );
 		$num_updated        = 0;
 		$num_deleted        = 0;
diff --git a/plugins/woocommerce/src/Admin/API/Reports/Orders/Stats/DataStore.php b/plugins/woocommerce/src/Admin/API/Reports/Orders/Stats/DataStore.php
index 93e6cadadc6..c6517783cf5 100644
--- a/plugins/woocommerce/src/Admin/API/Reports/Orders/Stats/DataStore.php
+++ b/plugins/woocommerce/src/Admin/API/Reports/Orders/Stats/DataStore.php
@@ -14,6 +14,7 @@ use Automattic\WooCommerce\Admin\API\Reports\TimeInterval;
 use Automattic\WooCommerce\Admin\API\Reports\SqlQuery;
 use Automattic\WooCommerce\Admin\API\Reports\Cache as ReportsCache;
 use Automattic\WooCommerce\Admin\API\Reports\Customers\DataStore as CustomersDataStore;
+use Automattic\WooCommerce\Enums\OrderItemType;
 use Automattic\WooCommerce\Internal\Admin\Schedulers\OrdersScheduler;
 use Automattic\WooCommerce\Utilities\OrderUtil;
 use Automattic\WooCommerce\Admin\API\Reports\StatsDataStoreTrait;
@@ -676,7 +677,7 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
 	protected static function get_num_items_sold( $order ) {
 		$num_items = 0;

-		$line_items = $order->get_items( 'line_item' );
+		$line_items = $order->get_items( OrderItemType::LINE_ITEM );
 		foreach ( $line_items as $line_item ) {
 			$num_items += $line_item->get_quantity();
 		}
diff --git a/plugins/woocommerce/src/Admin/API/Reports/Taxes/DataStore.php b/plugins/woocommerce/src/Admin/API/Reports/Taxes/DataStore.php
index 5e8b144d403..6af6230de97 100644
--- a/plugins/woocommerce/src/Admin/API/Reports/Taxes/DataStore.php
+++ b/plugins/woocommerce/src/Admin/API/Reports/Taxes/DataStore.php
@@ -12,6 +12,7 @@ use Automattic\WooCommerce\Admin\API\Reports\DataStoreInterface;
 use Automattic\WooCommerce\Admin\API\Reports\TimeInterval;
 use Automattic\WooCommerce\Admin\API\Reports\SqlQuery;
 use Automattic\WooCommerce\Admin\API\Reports\Cache as ReportsCache;
+use Automattic\WooCommerce\Enums\OrderItemType;

 /**
  * API\Reports\Taxes\DataStore.
@@ -274,7 +275,7 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
 			return -1;
 		}

-		$tax_items   = $order->get_items( 'tax' );
+		$tax_items   = $order->get_items( OrderItemType::TAX );
 		$num_updated = 0;

 		foreach ( $tax_items as $tax_item ) {
diff --git a/plugins/woocommerce/src/Admin/Overrides/Order.php b/plugins/woocommerce/src/Admin/Overrides/Order.php
index 37e52fbf201..90d20359451 100644
--- a/plugins/woocommerce/src/Admin/Overrides/Order.php
+++ b/plugins/woocommerce/src/Admin/Overrides/Order.php
@@ -11,6 +11,7 @@ defined( 'ABSPATH' ) || exit;

 use Automattic\WooCommerce\Admin\API\Reports\Customers\DataStore as CustomersDataStore;
 use Automattic\WooCommerce\Admin\API\Reports\Orders\Stats\DataStore as OrdersStatsDataStore;
+use Automattic\WooCommerce\Enums\OrderItemType;

 /**
  * WC_Order subclass.
@@ -61,11 +62,11 @@ class Order extends \WC_Order {
 	 */
 	public function get_line_item_data( $type ) {
 		$type_to_items = array(
-			'line_items'     => 'line_item',
-			'tax_lines'      => 'tax',
-			'shipping_lines' => 'shipping',
-			'fee_lines'      => 'fee',
-			'coupon_lines'   => 'coupon',
+			'line_items'     => OrderItemType::LINE_ITEM,
+			'tax_lines'      => OrderItemType::TAX,
+			'shipping_lines' => OrderItemType::SHIPPING,
+			'fee_lines'      => OrderItemType::FEE,
+			'coupon_lines'   => OrderItemType::COUPON,
 		);

 		if ( isset( $type_to_items[ $type ] ) ) {
diff --git a/plugins/woocommerce/src/Admin/Overrides/OrderTraits.php b/plugins/woocommerce/src/Admin/Overrides/OrderTraits.php
index e4ba4d0d7a3..c0a4710494c 100644
--- a/plugins/woocommerce/src/Admin/Overrides/OrderTraits.php
+++ b/plugins/woocommerce/src/Admin/Overrides/OrderTraits.php
@@ -9,6 +9,8 @@ namespace Automattic\WooCommerce\Admin\Overrides;

 defined( 'ABSPATH' ) || exit;

+use Automattic\WooCommerce\Enums\OrderItemType;
+
 /**
  * OrderTraits class.
  */
@@ -74,7 +76,7 @@ trait OrderTraits {

 		if ( null === $shipping_tax_amount ) {
 			$order_taxes         = $this->get_taxes();
-			$line_items_shipping = $this->get_items( 'shipping' );
+			$line_items_shipping = $this->get_items( OrderItemType::SHIPPING );
 			foreach ( $line_items_shipping as $item_id => $shipping_item ) {
 				$tax_data = $shipping_item->get_taxes();
 				if ( $tax_data ) {
diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/OrderConfirmation/Totals.php b/plugins/woocommerce/src/Blocks/BlockTypes/OrderConfirmation/Totals.php
index a71e671a613..514ac6b2736 100644
--- a/plugins/woocommerce/src/Blocks/BlockTypes/OrderConfirmation/Totals.php
+++ b/plugins/woocommerce/src/Blocks/BlockTypes/OrderConfirmation/Totals.php
@@ -3,6 +3,7 @@
 namespace Automattic\WooCommerce\Blocks\BlockTypes\OrderConfirmation;

 use Automattic\WooCommerce\Blocks\Utils\StyleAttributesUtils;
+use Automattic\WooCommerce\Enums\OrderItemType;

 /**
  * Totals class.
@@ -100,7 +101,7 @@ class Totals extends AbstractOrderConfirmationBlock {
 		$return      = '';
 		$order_items = array_filter(
 		// phpcs:ignore WooCommerce.Commenting.CommentHooks.MissingHookComment
-			$order->get_items( apply_filters( 'woocommerce_purchase_order_item_types', 'line_item' ) ),
+			$order->get_items( apply_filters( 'woocommerce_purchase_order_item_types', OrderItemType::LINE_ITEM ) ),
 			function( $item ) {
                 // phpcs:ignore WooCommerce.Commenting.CommentHooks.MissingHookComment
 				return apply_filters( 'woocommerce_order_item_visible', true, $item );
diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/ProductCollection/HandlerRegistry.php b/plugins/woocommerce/src/Blocks/BlockTypes/ProductCollection/HandlerRegistry.php
index e0fa65318e1..02c7823eb60 100644
--- a/plugins/woocommerce/src/Blocks/BlockTypes/ProductCollection/HandlerRegistry.php
+++ b/plugins/woocommerce/src/Blocks/BlockTypes/ProductCollection/HandlerRegistry.php
@@ -4,6 +4,7 @@ declare(strict_types=1);
 namespace Automattic\WooCommerce\Blocks\BlockTypes\ProductCollection;

 use Automattic\WooCommerce\Blocks\Utils\CartCheckoutUtils;
+use Automattic\WooCommerce\Enums\OrderItemType;
 use InvalidArgumentException;

 /**
@@ -434,7 +435,7 @@ class HandlerRegistry {
 					function ( $item ) {
 						return $item->get_product_id();
 					},
-					$order->get_items( 'line_item' )
+					$order->get_items( OrderItemType::LINE_ITEM )
 				)
 			);
 		}
diff --git a/plugins/woocommerce/src/Checkout/Helpers/ReserveStock.php b/plugins/woocommerce/src/Checkout/Helpers/ReserveStock.php
index 352250685d4..df8457253b0 100644
--- a/plugins/woocommerce/src/Checkout/Helpers/ReserveStock.php
+++ b/plugins/woocommerce/src/Checkout/Helpers/ReserveStock.php
@@ -6,6 +6,7 @@
 namespace Automattic\WooCommerce\Checkout\Helpers;

 use Automattic\WooCommerce\Enums\OrderInternalStatus;
+use Automattic\WooCommerce\Enums\OrderItemType;
 use Automattic\WooCommerce\Utilities\OrderUtil;
 use Automattic\WooCommerce\Internal\Orders\OrderNoteGroup;

@@ -93,7 +94,7 @@ final class ReserveStock {
 			$items = array_filter(
 				$order->get_items(),
 				function ( $item ) {
-					return $item->is_type( 'line_item' ) && $item->get_product() instanceof \WC_Product && $item->get_quantity() > 0;
+					return $item->is_type( OrderItemType::LINE_ITEM ) && $item->get_product() instanceof \WC_Product && $item->get_quantity() > 0;
 				}
 			);
 			$rows  = array();
diff --git a/plugins/woocommerce/src/Enums/OrderItemType.php b/plugins/woocommerce/src/Enums/OrderItemType.php
new file mode 100644
index 00000000000..ac679946c77
--- /dev/null
+++ b/plugins/woocommerce/src/Enums/OrderItemType.php
@@ -0,0 +1,47 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace Automattic\WooCommerce\Enums;
+
+/**
+ * Enum class for all the order item types.
+ *
+ * @since 10.8.0
+ */
+final class OrderItemType {
+	/**
+	 * Product line item type.
+	 *
+	 * @var string
+	 */
+	public const LINE_ITEM = 'line_item';
+
+	/**
+	 * Fee line item type.
+	 *
+	 * @var string
+	 */
+	public const FEE = 'fee';
+
+	/**
+	 * Shipping line item type.
+	 *
+	 * @var string
+	 */
+	public const SHIPPING = 'shipping';
+
+	/**
+	 * Tax line item type.
+	 *
+	 * @var string
+	 */
+	public const TAX = 'tax';
+
+	/**
+	 * Coupon (discount) line item type.
+	 *
+	 * @var string
+	 */
+	public const COUPON = 'coupon';
+}
diff --git a/plugins/woocommerce/src/Enums/README.md b/plugins/woocommerce/src/Enums/README.md
index 516d9742bdf..7f9d967e947 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.
 - [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.
 - [PaymentGatewayFeatures](./PaymentGatewayFeatures.php) - Enumerates the possible features of a payment gateway.
 - [ProductStatus](./ProductStatus.php) - Enumerates the possible statuses of a product.
diff --git a/plugins/woocommerce/src/Gateways/PayPal/Request.php b/plugins/woocommerce/src/Gateways/PayPal/Request.php
index e5d361088d5..d7d14faf98e 100644
--- a/plugins/woocommerce/src/Gateways/PayPal/Request.php
+++ b/plugins/woocommerce/src/Gateways/PayPal/Request.php
@@ -9,6 +9,7 @@ use WC_Order;
 use Automattic\WooCommerce\Gateways\PayPal\Constants as PayPalConstants;
 use Automattic\WooCommerce\Gateways\PayPal\AddressRequirements as PayPalAddressRequirements;
 use Automattic\WooCommerce\Gateways\PayPal\Helper as PayPalHelper;
+use Automattic\WooCommerce\Enums\OrderItemType;
 use Automattic\WooCommerce\Enums\OrderStatus;
 use Automattic\Jetpack\Connection\Client as Jetpack_Connection_Client;

@@ -870,7 +871,7 @@ class Request {
 	private function get_paypal_order_items( WC_Order $order ): array {
 		$items = array();

-		foreach ( $order->get_items( array( 'line_item', 'fee' ) ) as $item ) {
+		foreach ( $order->get_items( array( OrderItemType::LINE_ITEM, OrderItemType::FEE ) ) as $item ) {
 			$item_amount = $this->get_paypal_order_item_amount( $order, $item );
 			if ( $item_amount < 0 ) {
 				// PayPal does not accept negative item amounts in the items breakdown, so we return an empty list.
@@ -905,7 +906,7 @@ class Request {
 	 */
 	private function get_paypal_order_items_subtotal( WC_Order $order ): float {
 		$total = 0;
-		foreach ( $order->get_items( array( 'line_item', 'fee' ) ) as $item ) {
+		foreach ( $order->get_items( array( OrderItemType::LINE_ITEM, OrderItemType::FEE ) ) as $item ) {
 			$total += wc_add_number_precision( $this->get_paypal_order_item_amount( $order, $item ) * $item->get_quantity(), false );
 		}

@@ -920,7 +921,7 @@ class Request {
 	 * @return float
 	 */
 	private function get_paypal_order_item_amount( WC_Order $order, \WC_Order_Item $item ): float {
-		if ( 'fee' === $item->get_type() && $item instanceof \WC_Order_Item_Fee ) {
+		if ( OrderItemType::FEE === $item->get_type() && $item instanceof \WC_Order_Item_Fee ) {
 			return (float) $item->get_amount();
 		}
 		return (float) $order->get_item_subtotal( $item, $include_tax = false, $rounding_enabled = false );
diff --git a/plugins/woocommerce/src/Internal/ReceiptRendering/ReceiptRenderingEngine.php b/plugins/woocommerce/src/Internal/ReceiptRendering/ReceiptRenderingEngine.php
index 9fdbead272d..0148a976ad6 100644
--- a/plugins/woocommerce/src/Internal/ReceiptRendering/ReceiptRenderingEngine.php
+++ b/plugins/woocommerce/src/Internal/ReceiptRendering/ReceiptRenderingEngine.php
@@ -2,6 +2,7 @@

 namespace Automattic\WooCommerce\Internal\ReceiptRendering;

+use Automattic\WooCommerce\Enums\OrderItemType;
 use Automattic\WooCommerce\Internal\Orders\PaymentInfo;
 use Automattic\WooCommerce\Internal\TransientFiles\TransientFilesEngine;
 use Automattic\WooCommerce\Proxies\LegacyProxy;
@@ -295,7 +296,7 @@ class ReceiptRenderingEngine {
 		$get_price_args = array( 'currency' => $order->get_currency() );

 		$line_items_info = array();
-		$line_items      = $order->get_items( 'line_item' );
+		$line_items      = $order->get_items( OrderItemType::LINE_ITEM );
 		foreach ( $line_items as $line_item ) {
 			$line_item_product = $line_item->get_product();
 			if ( false === $line_item_product ) {
@@ -334,7 +335,7 @@ class ReceiptRenderingEngine {
 		foreach ( $order->get_fees() as $fee ) {
 			$name              = $fee->get_name();
 			$line_items_info[] = array(
-				'type'   => 'fee',
+				'type'   => OrderItemType::FEE,
 				'title'  => '' === $name ? __( 'Fee', 'woocommerce' ) : $name,
 				'amount' => wc_price( $fee->get_total(), $get_price_args ),
 			);
diff --git a/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Orders/CollectionQuery.php b/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Orders/CollectionQuery.php
index acf65442118..387b62b0279 100644
--- a/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Orders/CollectionQuery.php
+++ b/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Orders/CollectionQuery.php
@@ -16,6 +16,7 @@ use WP_REST_Request;
 use WP_Http;
 use WP_Error;
 use Automattic\WooCommerce\Internal\RestApi\Routes\V4\AbstractCollectionQuery;
+use Automattic\WooCommerce\Enums\OrderItemType;
 use Automattic\WooCommerce\Enums\OrderStatus;
 use Automattic\WooCommerce\Utilities\OrderUtil;
 use WC_Order_Query;
@@ -244,10 +245,11 @@ class CollectionQuery extends AbstractCollectionQuery {

 			$order_ids = $wpdb->get_col(
 				$wpdb->prepare(
-					"SELECT order_id FROM %i WHERE order_item_id IN ( SELECT order_item_id FROM %i WHERE meta_key = '_product_id' AND meta_value = %d ) AND order_item_type = 'line_item'",
+					"SELECT order_id FROM %i WHERE order_item_id IN ( SELECT order_item_id FROM %i WHERE meta_key = '_product_id' AND meta_value = %d ) AND order_item_type = %s",
 					$wpdb->prefix . 'woocommerce_order_items',
 					$wpdb->prefix . 'woocommerce_order_itemmeta',
-					$request['product']
+					$request['product'],
+					OrderItemType::LINE_ITEM
 				)
 			);

diff --git a/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Orders/Schema/OrderSchema.php b/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Orders/Schema/OrderSchema.php
index f419fa5662e..e3d3302fbf7 100644
--- a/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Orders/Schema/OrderSchema.php
+++ b/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Orders/Schema/OrderSchema.php
@@ -12,6 +12,7 @@ namespace Automattic\WooCommerce\Internal\RestApi\Routes\V4\Orders\Schema;
 defined( 'ABSPATH' ) || exit;

 use Automattic\WooCommerce\Internal\RestApi\Routes\V4\AbstractSchema;
+use Automattic\WooCommerce\Enums\OrderItemType;
 use Automattic\WooCommerce\Enums\OrderStatus;
 use Automattic\WooCommerce\Internal\CostOfGoodsSold\CogsAwareTrait;
 use Automattic\WooCommerce\Utilities\OrderUtil;
@@ -653,7 +654,7 @@ class OrderSchema extends AbstractSchema {
 		}

 		if ( in_array( 'line_items', $include_fields, true ) ) {
-			$line_items         = $order->get_items( 'line_item' );
+			$line_items         = $order->get_items( OrderItemType::LINE_ITEM );
 			$data['line_items'] = array();
 			foreach ( $line_items as $line_item ) {
 				$data['line_items'][] = $this->order_item_schema->get_item_response( $line_item, $request );
@@ -661,7 +662,7 @@ class OrderSchema extends AbstractSchema {
 		}

 		if ( in_array( 'shipping_lines', $include_fields, true ) ) {
-			$line_items             = $order->get_items( 'shipping' );
+			$line_items             = $order->get_items( OrderItemType::SHIPPING );
 			$data['shipping_lines'] = array();
 			foreach ( $line_items as $line_item ) {
 				$data['shipping_lines'][] = $this->order_shipping_schema->get_item_response( $line_item, $request );
@@ -669,7 +670,7 @@ class OrderSchema extends AbstractSchema {
 		}

 		if ( in_array( 'coupon_lines', $include_fields, true ) ) {
-			$line_items           = $order->get_items( 'coupon' );
+			$line_items           = $order->get_items( OrderItemType::COUPON );
 			$data['coupon_lines'] = array();
 			foreach ( $line_items as $line_item ) {
 				$data['coupon_lines'][] = $this->order_coupon_schema->get_item_response( $line_item, $request );
@@ -677,7 +678,7 @@ class OrderSchema extends AbstractSchema {
 		}

 		if ( in_array( 'fee_lines', $include_fields, true ) ) {
-			$line_items        = $order->get_items( 'fee' );
+			$line_items        = $order->get_items( OrderItemType::FEE );
 			$data['fee_lines'] = array();
 			foreach ( $line_items as $line_item ) {
 				$data['fee_lines'][] = $this->order_fee_schema->get_item_response( $line_item, $request );
@@ -685,7 +686,7 @@ class OrderSchema extends AbstractSchema {
 		}

 		if ( in_array( 'tax_lines', $include_fields, true ) ) {
-			$line_items        = $order->get_items( 'tax' );
+			$line_items        = $order->get_items( OrderItemType::TAX );
 			$data['tax_lines'] = array();
 			foreach ( $line_items as $line_item ) {
 				$data['tax_lines'][] = $this->order_tax_schema->get_item_response( $line_item, $request );
diff --git a/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Orders/UpdateUtils.php b/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Orders/UpdateUtils.php
index 70cf6180648..3489f01ce5c 100644
--- a/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Orders/UpdateUtils.php
+++ b/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Orders/UpdateUtils.php
@@ -13,6 +13,7 @@ defined( 'ABSPATH' ) || exit;

 use Automattic\WooCommerce\Internal\Orders\OrderNoteGroup;
 use Automattic\WooCommerce\Internal\RestApi\Routes\V4\Orders\Schema\OrderSchema;
+use Automattic\WooCommerce\Enums\OrderItemType;
 use Automattic\WooCommerce\Enums\OrderStatus;
 use Automattic\WooCommerce\Internal\CostOfGoodsSold\CogsAwareTrait;
 use Automattic\WooCommerce\Utilities\ArrayUtil;
@@ -77,13 +78,13 @@ class UpdateUtils {
 			if ( 'billing' === $key || 'shipping' === $key ) {
 				$this->update_address( $order, $key, (array) $value );
 			} elseif ( 'coupon_lines' === $key ) {
-				$this->update_line_items( $order, (array) $value, 'coupon' );
+				$this->update_line_items( $order, (array) $value, OrderItemType::COUPON );
 			} elseif ( 'line_items' === $key ) {
-				$this->update_line_items( $order, (array) $value, 'line_item' );
+				$this->update_line_items( $order, (array) $value, OrderItemType::LINE_ITEM );
 			} elseif ( 'shipping_lines' === $key ) {
-				$this->update_line_items( $order, (array) $value, 'shipping' );
+				$this->update_line_items( $order, (array) $value, OrderItemType::SHIPPING );
 			} elseif ( 'fee_lines' === $key ) {
-				$this->update_line_items( $order, (array) $value, 'fee' );
+				$this->update_line_items( $order, (array) $value, OrderItemType::FEE );
 			} elseif ( 'meta_data' === $key ) {
 				$this->update_meta_data( $order, (array) $value );
 			} elseif ( is_callable( array( $order, "set_{$key}" ) ) ) {
@@ -159,8 +160,8 @@ class UpdateUtils {
 	 * @param array    $line_items The line items to update.
 	 * @param string   $line_items_type The type of line items to update.
 	 */
-	protected function update_line_items( WC_Order $order, array $line_items, string $line_items_type = 'line_item' ) {
-		if ( ! in_array( $line_items_type, array( 'line_item', 'shipping', 'fee', 'coupon' ), true ) ) {
+	protected function update_line_items( WC_Order $order, array $line_items, string $line_items_type = OrderItemType::LINE_ITEM ) {
+		if ( ! in_array( $line_items_type, array( OrderItemType::LINE_ITEM, OrderItemType::SHIPPING, OrderItemType::FEE, OrderItemType::COUPON ), true ) ) {
 			throw new WC_REST_Exception( 'woocommerce_rest_invalid_line_items_type', esc_html__( 'Invalid line items type.', 'woocommerce' ), 400 );
 		}

@@ -235,7 +236,7 @@ class UpdateUtils {
 		}

 		// Maybe update product stock quantity.
-		if ( 'line_item' === $line_items_type && in_array( $order->get_status(), array( OrderStatus::PROCESSING, OrderStatus::COMPLETED, OrderStatus::ON_HOLD ), true ) ) {
+		if ( OrderItemType::LINE_ITEM === $line_items_type && in_array( $order->get_status(), array( OrderStatus::PROCESSING, OrderStatus::COMPLETED, OrderStatus::ON_HOLD ), true ) ) {
 			require_once WC_ABSPATH . 'includes/admin/wc-admin-functions.php';
 			$changed_stock = wc_maybe_adjust_line_item_product_stock( $item );
 			if ( $changed_stock && ! is_wp_error( $changed_stock ) ) {
@@ -307,7 +308,7 @@ class UpdateUtils {
 			);
 		}

-		if ( 'line_item' === $line_items_type ) {
+		if ( OrderItemType::LINE_ITEM === $line_items_type ) {
 			require_once WC_ABSPATH . 'includes/admin/wc-admin-functions.php';
 			wc_maybe_adjust_line_item_product_stock( $item, 0 );
 		}
diff --git a/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Refunds/DataUtils.php b/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Refunds/DataUtils.php
index f247783996f..2761f7eb171 100644
--- a/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Refunds/DataUtils.php
+++ b/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Refunds/DataUtils.php
@@ -9,6 +9,7 @@ namespace Automattic\WooCommerce\Internal\RestApi\Routes\V4\Refunds;

 defined( 'ABSPATH' ) || exit;

+use Automattic\WooCommerce\Enums\OrderItemType;
 use Automattic\WooCommerce\Utilities\NumberUtil;
 use WP_Error;
 use WC_Order;
@@ -263,7 +264,7 @@ class DataUtils {
 	 */
 	private function build_tax_rates_array( WC_Order $order, array $tax_ids ): array {
 		$tax_rates = array();
-		$tax_items = $order->get_items( 'tax' );
+		$tax_items = $order->get_items( OrderItemType::TAX );

 		foreach ( $tax_ids as $tax_id ) {
 			foreach ( $tax_items as $tax_item ) {
diff --git a/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Refunds/Schema/RefundSchema.php b/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Refunds/Schema/RefundSchema.php
index e97276af344..95745186ce3 100644
--- a/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Refunds/Schema/RefundSchema.php
+++ b/plugins/woocommerce/src/Internal/RestApi/Routes/V4/Refunds/Schema/RefundSchema.php
@@ -12,6 +12,7 @@ namespace Automattic\WooCommerce\Internal\RestApi\Routes\V4\Refunds\Schema;
 defined( 'ABSPATH' ) || exit;

 use Automattic\WooCommerce\Internal\RestApi\Routes\V4\AbstractSchema;
+use Automattic\WooCommerce\Enums\OrderItemType;
 use Automattic\WooCommerce\Internal\CostOfGoodsSold\CogsAwareTrait;
 use Automattic\WooCommerce\Utilities\OrderUtil;
 use Automattic\WooCommerce\Internal\RestApi\Routes\V4\Orders\Schema\OrderItemSchema;
@@ -342,9 +343,9 @@ class RefundSchema extends AbstractSchema {

 		if ( in_array( 'line_items', $include_fields, true ) ) {
 			$data['line_items'] = array_merge(
-				$this->get_line_items_response( $refund->get_items( 'line_item' ), $request ),
-				$this->get_line_items_response( $refund->get_items( 'fee' ), $request ),
-				$this->get_line_items_response( $refund->get_items( 'shipping' ), $request ),
+				$this->get_line_items_response( $refund->get_items( OrderItemType::LINE_ITEM ), $request ),
+				$this->get_line_items_response( $refund->get_items( OrderItemType::FEE ), $request ),
+				$this->get_line_items_response( $refund->get_items( OrderItemType::SHIPPING ), $request ),
 			);
 		}

diff --git a/plugins/woocommerce/src/Internal/RestockRefundedItemsAdjuster.php b/plugins/woocommerce/src/Internal/RestockRefundedItemsAdjuster.php
index b4ccb4f62cb..974da5ab0d0 100644
--- a/plugins/woocommerce/src/Internal/RestockRefundedItemsAdjuster.php
+++ b/plugins/woocommerce/src/Internal/RestockRefundedItemsAdjuster.php
@@ -5,6 +5,7 @@

 namespace Automattic\WooCommerce\Internal;

+use Automattic\WooCommerce\Enums\OrderItemType;
 use Automattic\WooCommerce\Proxies\LegacyProxy;

 defined( 'ABSPATH' ) || exit;
@@ -59,7 +60,7 @@ class RestockRefundedItemsAdjuster {
 					continue;
 				}

-				if ( 'line_item' !== $item->get_type() ) {
+				if ( OrderItemType::LINE_ITEM !== $item->get_type() ) {
 					continue;
 				}

diff --git a/plugins/woocommerce/src/StoreApi/Schemas/V1/OrderSchema.php b/plugins/woocommerce/src/StoreApi/Schemas/V1/OrderSchema.php
index 0352e2ff7a7..823b1d377a1 100644
--- a/plugins/woocommerce/src/StoreApi/Schemas/V1/OrderSchema.php
+++ b/plugins/woocommerce/src/StoreApi/Schemas/V1/OrderSchema.php
@@ -1,6 +1,7 @@
 <?php
 namespace Automattic\WooCommerce\StoreApi\Schemas\V1;

+use Automattic\WooCommerce\Enums\OrderItemType;
 use Automattic\WooCommerce\StoreApi\SchemaController;
 use Automattic\WooCommerce\StoreApi\Schemas\ExtendSchema;
 use Automattic\WooCommerce\StoreApi\Utilities\OrderController;
@@ -317,8 +318,8 @@ class OrderSchema extends AbstractSchema {
 			'id'                   => $order_id,
 			'status'               => $order->get_status(),
 			'items'                => $this->get_item_responses_from_schema( $this->item_schema, $order->get_items() ),
-			'coupons'              => $this->get_item_responses_from_schema( $this->coupon_schema, $order->get_items( 'coupon' ) ),
-			'fees'                 => $this->get_item_responses_from_schema( $this->fee_schema, $order->get_items( 'fee' ) ),
+			'coupons'              => $this->get_item_responses_from_schema( $this->coupon_schema, $order->get_items( OrderItemType::COUPON ) ),
+			'fees'                 => $this->get_item_responses_from_schema( $this->fee_schema, $order->get_items( OrderItemType::FEE ) ),
 			'totals'               => (object) $this->prepare_currency_response( $this->get_totals( $order ) ),
 			'shipping_address'     => (object) $this->shipping_address_schema->get_item_response( $order ),
 			'billing_address'      => (object) $this->billing_address_schema->get_item_response( $order ),
@@ -350,7 +351,7 @@ class OrderSchema extends AbstractSchema {
 						function( $item ) {
 							return $item->get_total();
 						},
-						array_values( $order->get_items( 'line_item' ) )
+						array_values( $order->get_items( OrderItemType::LINE_ITEM ) )
 					)
 				)
 			),
@@ -360,7 +361,7 @@ class OrderSchema extends AbstractSchema {
 						function( $item ) {
 							return $item->get_tax_total();
 						},
-						array_values( $order->get_items( 'tax' ) )
+						array_values( $order->get_items( OrderItemType::TAX ) )
 					)
 				)
 			),
@@ -370,7 +371,7 @@ class OrderSchema extends AbstractSchema {
 						function( $item ) {
 							return $item->get_total_tax();
 						},
-						array_values( $order->get_items( 'fee' ) )
+						array_values( $order->get_items( OrderItemType::FEE ) )
 					)
 				)
 			),
@@ -384,7 +385,7 @@ class OrderSchema extends AbstractSchema {
 						'rate'  => strval( $item->get_rate_percent() ),
 					];
 				},
-				array_values( $order->get_items( 'tax' ) )
+				array_values( $order->get_items( OrderItemType::TAX ) )
 			),
 		];
 	}
diff --git a/plugins/woocommerce/src/StoreApi/Utilities/OrderController.php b/plugins/woocommerce/src/StoreApi/Utilities/OrderController.php
index e3e01789418..95c303abc16 100644
--- a/plugins/woocommerce/src/StoreApi/Utilities/OrderController.php
+++ b/plugins/woocommerce/src/StoreApi/Utilities/OrderController.php
@@ -7,6 +7,7 @@ use Automattic\WooCommerce\Blocks\Package;
 use Automattic\WooCommerce\Internal\Customers\SearchService as CustomerSearchService;
 use Automattic\WooCommerce\StoreApi\Exceptions\RouteException;
 use Automattic\WooCommerce\Utilities\ArrayUtil;
+use Automattic\WooCommerce\Enums\OrderItemType;
 use Automattic\WooCommerce\Utilities\DiscountsUtil;
 use Automattic\WooCommerce\Utilities\ShippingUtil;
 use Exception;
@@ -810,31 +811,31 @@ class OrderController {

 		if ( $order->get_cart_hash() !== $cart_hashes['line_items'] ) {
 			$order->set_cart_hash( $cart_hashes['line_items'] );
-			$order->remove_order_items( 'line_item' );
+			$order->remove_order_items( OrderItemType::LINE_ITEM );
 			wc()->checkout->create_order_line_items( $order, $cart );
 		}

 		if ( $order->get_meta( '_shipping_hash' ) !== $cart_hashes['shipping'] ) {
 			$order->update_meta_data( '_shipping_hash', $cart_hashes['shipping'] );
-			$order->remove_order_items( 'shipping' );
+			$order->remove_order_items( OrderItemType::SHIPPING );
 			wc()->checkout->create_order_shipping_lines( $order, wc()->session->get( 'chosen_shipping_methods' ), wc()->shipping()->get_packages() );
 		}

 		if ( $order->get_meta( '_coupons_hash' ) !== $cart_hashes['coupons'] ) {
-			$order->remove_order_items( 'coupon' );
+			$order->remove_order_items( OrderItemType::COUPON );
 			$order->update_meta_data( '_coupons_hash', $cart_hashes['coupons'] );
 			wc()->checkout->create_order_coupon_lines( $order, $cart );
 		}

 		if ( $order->get_meta( '_fees_hash' ) !== $cart_hashes['fees'] ) {
 			$order->update_meta_data( '_fees_hash', $cart_hashes['fees'] );
-			$order->remove_order_items( 'fee' );
+			$order->remove_order_items( OrderItemType::FEE );
 			wc()->checkout->create_order_fee_lines( $order, $cart );
 		}

 		if ( $order->get_meta( '_taxes_hash' ) !== $cart_hashes['taxes'] ) {
 			$order->update_meta_data( '_taxes_hash', $cart_hashes['taxes'] );
-			$order->remove_order_items( 'tax' );
+			$order->remove_order_items( OrderItemType::TAX );
 			wc()->checkout->create_order_tax_lines( $order, $cart );
 		}
 	}