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