Commit 876f9bb3064 for woocommerce
commit 876f9bb3064fc12bc533ea1daf783a6f471baea1
Author: Wesley Rosa <wesleyjrosa@gmail.com>
Date: Thu Jun 18 13:53:12 2026 -0300
Add TaxDisplayMode enum class for woocommerce_tax_display option values (#65812)
Add TaxDisplayMode enum class and adopt it across the codebase
Introduces src/Enums/TaxDisplayMode.php with INCLUSIVE ('incl') and
EXCLUSIVE ('excl') constants for the woocommerce_tax_display_shop and
woocommerce_tax_display_cart option values, and replaces raw string
literals across the codebase with the enum constants.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
diff --git a/plugins/woocommerce/changelog/add-tax-display-mode-enum b/plugins/woocommerce/changelog/add-tax-display-mode-enum
new file mode 100644
index 00000000000..e46324ce2ed
--- /dev/null
+++ b/plugins/woocommerce/changelog/add-tax-display-mode-enum
@@ -0,0 +1,4 @@
+Significance: minor
+Type: add
+
+Add TaxDisplayMode enum class for woocommerce_tax_display_shop/cart option values and implement it across the codebase.
diff --git a/plugins/woocommerce/includes/abstracts/abstract-wc-order.php b/plugins/woocommerce/includes/abstracts/abstract-wc-order.php
index 617e9ad7b1c..e9116bdd302 100644
--- a/plugins/woocommerce/includes/abstracts/abstract-wc-order.php
+++ b/plugins/woocommerce/includes/abstracts/abstract-wc-order.php
@@ -15,6 +15,7 @@ use Automattic\WooCommerce\Enums\OrderStatus;
use Automattic\WooCommerce\Enums\ProductTaxStatus;
use Automattic\WooCommerce\Enums\ProductType;
use Automattic\WooCommerce\Enums\TaxBasedOn;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
use Automattic\WooCommerce\Internal\CostOfGoodsSold\CogsAwareTrait;
use Automattic\WooCommerce\Internal\Customers\SearchService as CustomersSearchService;
use Automattic\WooCommerce\Internal\Orders\PaymentInfo;
@@ -2428,7 +2429,7 @@ abstract class WC_Abstract_Order extends WC_Abstract_Legacy_Order {
public function get_formatted_line_subtotal( $item, $tax_display = '' ) {
$tax_display = $tax_display ? $tax_display : get_option( 'woocommerce_tax_display_cart' );
- if ( 'excl' === $tax_display ) {
+ if ( TaxDisplayMode::EXCLUSIVE === $tax_display ) {
$ex_tax_label = $this->get_prices_include_tax() ? 1 : 0;
$subtotal = wc_price(
@@ -2468,7 +2469,7 @@ abstract class WC_Abstract_Order extends WC_Abstract_Legacy_Order {
if ( ! $compound ) {
- if ( 'incl' === $tax_display ) {
+ if ( TaxDisplayMode::INCLUSIVE === $tax_display ) {
$subtotal_taxes = 0;
foreach ( $this->get_items() as $item ) {
$subtotal_taxes += self::round_line_tax( (float) $item->get_subtotal_tax(), false );
@@ -2478,11 +2479,11 @@ abstract class WC_Abstract_Order extends WC_Abstract_Legacy_Order {
$subtotal = wc_price( $subtotal, array( 'currency' => $this->get_currency() ) );
- if ( 'excl' === $tax_display && $this->get_prices_include_tax() && wc_tax_enabled() ) {
+ if ( TaxDisplayMode::EXCLUSIVE === $tax_display && $this->get_prices_include_tax() && wc_tax_enabled() ) {
$subtotal .= ' <small class="tax_label">' . WC()->countries->ex_tax_or_vat() . '</small>';
}
} else {
- if ( 'incl' === $tax_display ) {
+ if ( TaxDisplayMode::INCLUSIVE === $tax_display ) {
return '';
}
@@ -2516,7 +2517,7 @@ abstract class WC_Abstract_Order extends WC_Abstract_Legacy_Order {
if ( 0 < abs( (float) $this->get_shipping_total() ) ) {
- if ( 'excl' === $tax_display ) {
+ if ( TaxDisplayMode::EXCLUSIVE === $tax_display ) {
// Show shipping excluding tax.
$shipping = wc_price( $this->get_shipping_total(), array( 'currency' => $this->get_currency() ) );
@@ -2561,7 +2562,7 @@ abstract class WC_Abstract_Order extends WC_Abstract_Legacy_Order {
*
* @since 2.7.0.
*/
- return apply_filters( 'woocommerce_order_discount_to_display', wc_price( $this->get_total_discount( 'excl' === $tax_display ), array( 'currency' => $this->get_currency() ) ), $this );
+ return apply_filters( 'woocommerce_order_discount_to_display', wc_price( $this->get_total_discount( TaxDisplayMode::EXCLUSIVE === $tax_display ), array( 'currency' => $this->get_currency() ) ), $this );
}
/**
@@ -2636,7 +2637,7 @@ abstract class WC_Abstract_Order extends WC_Abstract_Legacy_Order {
$total_rows[ 'fee_' . $fee->get_id() ] = array(
'type' => 'fee',
'label' => $fee->get_name() . ':',
- 'value' => wc_price( 'excl' === $tax_display ? (float) $fee->get_total() : (float) $fee->get_total() + (float) $fee->get_total_tax(), array( 'currency' => $this->get_currency() ) ),
+ 'value' => wc_price( TaxDisplayMode::EXCLUSIVE === $tax_display ? (float) $fee->get_total() : (float) $fee->get_total() + (float) $fee->get_total_tax(), array( 'currency' => $this->get_currency() ) ),
);
}
}
@@ -2651,7 +2652,7 @@ abstract class WC_Abstract_Order extends WC_Abstract_Legacy_Order {
*/
protected function add_order_item_totals_tax_rows( &$total_rows, $tax_display ) {
// Tax for tax exclusive prices.
- if ( 'excl' === $tax_display && wc_tax_enabled() ) {
+ if ( TaxDisplayMode::EXCLUSIVE === $tax_display && wc_tax_enabled() ) {
if ( 'itemized' === get_option( 'woocommerce_tax_total_display' ) ) {
foreach ( $this->get_tax_totals() as $code => $tax ) {
$total_rows[ sanitize_title( $code ) ] = array(
diff --git a/plugins/woocommerce/includes/admin/settings/views/settings-tax.php b/plugins/woocommerce/includes/admin/settings/views/settings-tax.php
index b1546800ec9..2f14a66e242 100644
--- a/plugins/woocommerce/includes/admin/settings/views/settings-tax.php
+++ b/plugins/woocommerce/includes/admin/settings/views/settings-tax.php
@@ -8,6 +8,7 @@
defined( 'ABSPATH' ) || exit;
use Automattic\WooCommerce\Enums\TaxBasedOn;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
$settings = array(
@@ -78,24 +79,24 @@ $settings = array(
array(
'title' => __( 'Display prices in the shop', 'woocommerce' ),
'id' => 'woocommerce_tax_display_shop',
- 'default' => 'excl',
+ 'default' => TaxDisplayMode::EXCLUSIVE,
'type' => 'select',
'class' => 'wc-enhanced-select',
'options' => array(
- 'incl' => __( 'Including tax', 'woocommerce' ),
- 'excl' => __( 'Excluding tax', 'woocommerce' ),
+ TaxDisplayMode::INCLUSIVE => __( 'Including tax', 'woocommerce' ),
+ TaxDisplayMode::EXCLUSIVE => __( 'Excluding tax', 'woocommerce' ),
),
),
array(
'title' => __( 'Display prices during cart and checkout', 'woocommerce' ),
'id' => 'woocommerce_tax_display_cart',
- 'default' => 'excl',
+ 'default' => TaxDisplayMode::EXCLUSIVE,
'type' => 'select',
'class' => 'wc-enhanced-select',
'options' => array(
- 'incl' => __( 'Including tax', 'woocommerce' ),
- 'excl' => __( 'Excluding tax', 'woocommerce' ),
+ TaxDisplayMode::INCLUSIVE => __( 'Including tax', 'woocommerce' ),
+ TaxDisplayMode::EXCLUSIVE => __( 'Excluding tax', 'woocommerce' ),
),
),
diff --git a/plugins/woocommerce/includes/class-wc-cart.php b/plugins/woocommerce/includes/class-wc-cart.php
index 4e29045e352..84b14cbdc09 100644
--- a/plugins/woocommerce/includes/class-wc-cart.php
+++ b/plugins/woocommerce/includes/class-wc-cart.php
@@ -12,6 +12,7 @@
use Automattic\WooCommerce\Blocks\Utils\CartCheckoutUtils;
use Automattic\WooCommerce\Enums\ProductStatus;
use Automattic\WooCommerce\Enums\ProductType;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
use Automattic\WooCommerce\Internal\Tax\TaxRateDataStore;
use Automattic\WooCommerce\StoreApi\Utilities\LocalPickupUtils;
use Automattic\WooCommerce\Utilities\DiscountsUtil;
@@ -388,7 +389,14 @@ class WC_Cart extends WC_Legacy_Cart {
* @return bool
*/
public function display_prices_including_tax() {
- return apply_filters( 'woocommerce_cart_' . __FUNCTION__, 'incl' === $this->get_tax_price_display_mode() );
+ /**
+ * Filter whether or not the cart is displaying prices including tax.
+ *
+ * @since 3.3.0
+ *
+ * @param bool $display_prices_including_tax Whether or not the cart is displaying prices including tax.
+ */
+ return apply_filters( 'woocommerce_cart_' . __FUNCTION__, TaxDisplayMode::INCLUSIVE === $this->get_tax_price_display_mode() );
}
/*
@@ -2448,7 +2456,7 @@ class WC_Cart extends WC_Legacy_Cart {
*/
public function get_tax_price_display_mode() {
if ( $this->get_customer() && $this->get_customer()->get_is_vat_exempt() ) {
- return 'excl';
+ return TaxDisplayMode::EXCLUSIVE;
}
return get_option( 'woocommerce_tax_display_cart' );
diff --git a/plugins/woocommerce/includes/class-wc-order.php b/plugins/woocommerce/includes/class-wc-order.php
index d8afdd2c389..3b5bca75caf 100644
--- a/plugins/woocommerce/includes/class-wc-order.php
+++ b/plugins/woocommerce/includes/class-wc-order.php
@@ -7,6 +7,7 @@
*/
use Automattic\WooCommerce\Enums\OrderStatus;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
use Automattic\WooCommerce\Utilities\FeaturesUtil;
use Automattic\WooCommerce\StoreApi\Utilities\LocalPickupUtils;
use Automattic\WooCommerce\Utilities\NumberUtil;
@@ -222,7 +223,7 @@ class WC_Order extends WC_Abstract_Order {
$tax_string = '';
// Tax for inclusive prices.
- if ( wc_tax_enabled() && 'incl' === $tax_display ) {
+ if ( wc_tax_enabled() && TaxDisplayMode::INCLUSIVE === $tax_display ) {
$tax_string_array = array();
$tax_totals = $this->get_tax_totals();
diff --git a/plugins/woocommerce/includes/class-wc-product-grouped.php b/plugins/woocommerce/includes/class-wc-product-grouped.php
index 87558073937..418152756e1 100644
--- a/plugins/woocommerce/includes/class-wc-product-grouped.php
+++ b/plugins/woocommerce/includes/class-wc-product-grouped.php
@@ -9,6 +9,7 @@
*/
use Automattic\WooCommerce\Enums\ProductType;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
defined( 'ABSPATH' ) || exit;
@@ -97,7 +98,7 @@ class WC_Product_Grouped extends WC_Product {
foreach ( $children as $child ) {
if ( '' !== $child->get_price() ) {
- $child_prices[] = 'incl' === $tax_display_mode ? wc_get_price_including_tax( $child ) : wc_get_price_excluding_tax( $child );
+ $child_prices[] = TaxDisplayMode::INCLUSIVE === $tax_display_mode ? wc_get_price_including_tax( $child ) : wc_get_price_excluding_tax( $child );
}
}
diff --git a/plugins/woocommerce/includes/class-wc-query.php b/plugins/woocommerce/includes/class-wc-query.php
index edb899ca8b5..275f070bc00 100644
--- a/plugins/woocommerce/includes/class-wc-query.php
+++ b/plugins/woocommerce/includes/class-wc-query.php
@@ -8,6 +8,7 @@
use Automattic\WooCommerce\Internal\ProductAttributesLookup\Filterer;
use Automattic\WooCommerce\Enums\ProductStockStatus;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
defined( 'ABSPATH' ) || exit;
@@ -787,7 +788,7 @@ class WC_Query {
* Adjust if the store taxes are not displayed how they are stored.
* Kicks in when prices excluding tax are displayed including tax.
*/
- if ( wc_tax_enabled() && 'incl' === get_option( 'woocommerce_tax_display_shop' ) && ! wc_prices_include_tax() ) {
+ if ( wc_tax_enabled() && TaxDisplayMode::INCLUSIVE === get_option( 'woocommerce_tax_display_shop' ) && ! wc_prices_include_tax() ) {
$tax_class = apply_filters( 'woocommerce_price_filter_widget_tax_class', '' ); // Uses standard tax class.
$tax_rates = WC_Tax::get_rates( $tax_class );
diff --git a/plugins/woocommerce/includes/class-wc-structured-data.php b/plugins/woocommerce/includes/class-wc-structured-data.php
index d0318c43b58..5e647e1a044 100644
--- a/plugins/woocommerce/includes/class-wc-structured-data.php
+++ b/plugins/woocommerce/includes/class-wc-structured-data.php
@@ -15,6 +15,7 @@
use Automattic\WooCommerce\Enums\OrderStatus;
use Automattic\WooCommerce\Enums\ProductType;
use Automattic\WooCommerce\Enums\ProductStockStatus;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
defined( 'ABSPATH' ) || exit;
@@ -247,7 +248,7 @@ class WC_Structured_Data {
'validThrough' => $price_valid_until,
);
if ( wc_tax_enabled() ) {
- $unit_price_spec['valueAddedTaxIncluded'] = 'incl' === get_option( 'woocommerce_tax_display_shop' );
+ $unit_price_spec['valueAddedTaxIncluded'] = TaxDisplayMode::INCLUSIVE === get_option( 'woocommerce_tax_display_shop' );
}
$markup_offer = array(
'@type' => 'Offer',
@@ -283,7 +284,7 @@ class WC_Structured_Data {
'validThrough' => $sale_price_valid_until ?? $price_valid_until,
);
if ( wc_tax_enabled() ) {
- $sale_unit_price_spec['valueAddedTaxIncluded'] = 'incl' === get_option( 'woocommerce_tax_display_shop' );
+ $sale_unit_price_spec['valueAddedTaxIncluded'] = TaxDisplayMode::INCLUSIVE === get_option( 'woocommerce_tax_display_shop' );
}
$markup_offer['priceSpecification'] = array( $sale_unit_price_spec );
}
@@ -293,7 +294,7 @@ class WC_Structured_Data {
$child_ids = $product->get_children();
_prime_post_caches( $child_ids );
$children = array_filter( array_map( 'wc_get_product', $child_ids ), 'wc_products_array_filter_visible_grouped' );
- $price_function = 'incl' === $tax_display_mode ? 'wc_get_price_including_tax' : 'wc_get_price_excluding_tax';
+ $price_function = TaxDisplayMode::INCLUSIVE === $tax_display_mode ? 'wc_get_price_including_tax' : 'wc_get_price_excluding_tax';
foreach ( $children as $child ) {
if ( '' !== $child->get_regular_price() ) {
@@ -321,7 +322,7 @@ class WC_Structured_Data {
'validThrough' => $price_valid_until,
);
if ( wc_tax_enabled() ) {
- $unit_price_specification['valueAddedTaxIncluded'] = 'incl' === $tax_display_mode;
+ $unit_price_specification['valueAddedTaxIncluded'] = TaxDisplayMode::INCLUSIVE === $tax_display_mode;
}
if ( $product->is_on_sale() && $min_price !== $min_sale_price ) {
// `priceType` should only be specified in prices which are not the current offer.
@@ -349,13 +350,13 @@ class WC_Structured_Data {
'validThrough' => $sale_price_valid_until ?? $price_valid_until,
);
if ( wc_tax_enabled() ) {
- $grouped_sale_spec['valueAddedTaxIncluded'] = 'incl' === $tax_display_mode;
+ $grouped_sale_spec['valueAddedTaxIncluded'] = TaxDisplayMode::INCLUSIVE === $tax_display_mode;
}
array_unshift( $markup_offer['priceSpecification'], $grouped_sale_spec );
}
} else {
$tax_display_mode = get_option( 'woocommerce_tax_display_shop' );
- $regular_price = 'incl' === $tax_display_mode
+ $regular_price = TaxDisplayMode::INCLUSIVE === $tax_display_mode
? wc_get_price_including_tax( $product, array( 'price' => $product->get_regular_price() ) )
: wc_get_price_excluding_tax( $product, array( 'price' => $product->get_regular_price() ) );
$unit_price_specification = array(
@@ -365,7 +366,7 @@ class WC_Structured_Data {
'validThrough' => $price_valid_until,
);
if ( wc_tax_enabled() ) {
- $unit_price_specification['valueAddedTaxIncluded'] = 'incl' === $tax_display_mode;
+ $unit_price_specification['valueAddedTaxIncluded'] = TaxDisplayMode::INCLUSIVE === $tax_display_mode;
}
if ( $product->is_on_sale() ) {
// `priceType` should only be specified in prices which are not the current offer.
@@ -380,7 +381,7 @@ class WC_Structured_Data {
);
if ( $product->is_on_sale() ) {
- $sale_price = 'incl' === $tax_display_mode
+ $sale_price = TaxDisplayMode::INCLUSIVE === $tax_display_mode
? wc_get_price_including_tax( $product, array( 'price' => $product->get_sale_price() ) )
: wc_get_price_excluding_tax( $product, array( 'price' => $product->get_sale_price() ) );
if ( $product->get_date_on_sale_to() ) {
@@ -396,7 +397,7 @@ class WC_Structured_Data {
'validThrough' => $sale_price_valid_until ?? $price_valid_until,
);
if ( wc_tax_enabled() ) {
- $simple_sale_spec['valueAddedTaxIncluded'] = 'incl' === $tax_display_mode;
+ $simple_sale_spec['valueAddedTaxIncluded'] = TaxDisplayMode::INCLUSIVE === $tax_display_mode;
}
array_unshift( $markup_offer['priceSpecification'], $simple_sale_spec );
}
diff --git a/plugins/woocommerce/includes/data-stores/class-wc-product-variable-data-store-cpt.php b/plugins/woocommerce/includes/data-stores/class-wc-product-variable-data-store-cpt.php
index 780790a085d..c424a01cf21 100644
--- a/plugins/woocommerce/includes/data-stores/class-wc-product-variable-data-store-cpt.php
+++ b/plugins/woocommerce/includes/data-stores/class-wc-product-variable-data-store-cpt.php
@@ -8,6 +8,7 @@
use Automattic\WooCommerce\Internal\Caches\ProductVersionStringInvalidator;
use Automattic\WooCommerce\Enums\ProductStatus;
use Automattic\WooCommerce\Enums\ProductStockStatus;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
use Automattic\WooCommerce\Utilities\CallbackUtil;
if ( ! defined( 'ABSPATH' ) ) {
@@ -433,7 +434,7 @@ class WC_Product_Variable_Data_Store_CPT extends WC_Product_Data_Store_CPT imple
// If we are getting prices for display, we need to account for taxes.
if ( $for_display ) {
- if ( 'incl' === $tax_display_mode ) {
+ if ( TaxDisplayMode::INCLUSIVE === $tax_display_mode ) {
$price = '' === $price ? '' : wc_get_price_including_tax(
$variation,
array(
@@ -613,7 +614,7 @@ class WC_Product_Variable_Data_Store_CPT extends WC_Product_Data_Store_CPT imple
if ( $for_display && wc_tax_enabled() ) {
$price_hash = array(
- get_option( 'woocommerce_tax_display_shop', 'excl' ),
+ get_option( 'woocommerce_tax_display_shop', TaxDisplayMode::EXCLUSIVE ),
WC_Tax::get_rates(),
empty( WC()->customer ) ? false : WC()->customer->is_vat_exempt(),
);
diff --git a/plugins/woocommerce/includes/legacy/abstract-wc-legacy-order.php b/plugins/woocommerce/includes/legacy/abstract-wc-legacy-order.php
index e89fe74d64b..d513e044185 100644
--- a/plugins/woocommerce/includes/legacy/abstract-wc-legacy-order.php
+++ b/plugins/woocommerce/includes/legacy/abstract-wc-legacy-order.php
@@ -1,6 +1,7 @@
<?php
use Automattic\WooCommerce\Enums\OrderStatus;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
if ( ! defined( 'ABSPATH' ) ) {
exit;
@@ -433,9 +434,9 @@ abstract class WC_Abstract_Legacy_Order extends WC_Data {
} elseif ( 'tax_display_cart' === $key ) {
return get_option( 'woocommerce_tax_display_cart' );
} elseif ( 'display_totals_ex_tax' === $key ) {
- return 'excl' === get_option( 'woocommerce_tax_display_cart' );
+ return TaxDisplayMode::EXCLUSIVE === get_option( 'woocommerce_tax_display_cart' );
} elseif ( 'display_cart_ex_tax' === $key ) {
- return 'excl' === get_option( 'woocommerce_tax_display_cart' );
+ return TaxDisplayMode::EXCLUSIVE === get_option( 'woocommerce_tax_display_cart' );
} elseif ( 'cart_discount' === $key ) {
return $this->get_total_discount();
} elseif ( 'cart_discount_tax' === $key ) {
diff --git a/plugins/woocommerce/includes/wc-product-functions.php b/plugins/woocommerce/includes/wc-product-functions.php
index 4226a9a8c10..a63fe826bc4 100644
--- a/plugins/woocommerce/includes/wc-product-functions.php
+++ b/plugins/woocommerce/includes/wc-product-functions.php
@@ -13,6 +13,7 @@ use Automattic\WooCommerce\Enums\ProductStatus;
use Automattic\WooCommerce\Enums\ProductStockStatus;
use Automattic\WooCommerce\Enums\ProductType;
use Automattic\WooCommerce\Enums\CatalogVisibility;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
use Automattic\WooCommerce\Internal\Caches\ProductTransientsDeferrer;
use Automattic\WooCommerce\Internal\Utilities\ProductUtil;
use Automattic\WooCommerce\Proxies\LegacyProxy;
@@ -1677,7 +1678,7 @@ function wc_get_price_to_display( $product, $args = array() ) {
'cart' === $args['display_context'] ? 'woocommerce_tax_display_cart' : 'woocommerce_tax_display_shop'
);
- return 'incl' === $tax_display ?
+ return TaxDisplayMode::INCLUSIVE === $tax_display ?
wc_get_price_including_tax(
$product,
array(
diff --git a/plugins/woocommerce/includes/widgets/class-wc-widget-price-filter.php b/plugins/woocommerce/includes/widgets/class-wc-widget-price-filter.php
index 8b0175e7320..b9d4599c9d5 100644
--- a/plugins/woocommerce/includes/widgets/class-wc-widget-price-filter.php
+++ b/plugins/woocommerce/includes/widgets/class-wc-widget-price-filter.php
@@ -9,6 +9,7 @@
*/
use Automattic\Jetpack\Constants;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
defined( 'ABSPATH' ) || exit;
@@ -97,7 +98,7 @@ class WC_Widget_Price_Filter extends WC_Widget {
// Check to see if we should add taxes to the prices if store are excl tax but display incl.
$tax_display_mode = get_option( 'woocommerce_tax_display_shop' );
- if ( wc_tax_enabled() && ! wc_prices_include_tax() && 'incl' === $tax_display_mode ) {
+ if ( wc_tax_enabled() && ! wc_prices_include_tax() && TaxDisplayMode::INCLUSIVE === $tax_display_mode ) {
$tax_class = apply_filters( 'woocommerce_price_filter_widget_tax_class', '' ); // Uses standard tax class.
$tax_rates = WC_Tax::get_rates( $tax_class );
diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/Cart.php b/plugins/woocommerce/src/Blocks/BlockTypes/Cart.php
index 545e7f67523..5b6d27a60af 100644
--- a/plugins/woocommerce/src/Blocks/BlockTypes/Cart.php
+++ b/plugins/woocommerce/src/Blocks/BlockTypes/Cart.php
@@ -2,6 +2,7 @@
namespace Automattic\WooCommerce\Blocks\BlockTypes;
use Automattic\WooCommerce\Blocks\Utils\CartCheckoutUtils;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
/**
* Cart class.
@@ -255,7 +256,7 @@ class Cart extends AbstractBlock {
$this->asset_data_registry->add( 'countryData', CartCheckoutUtils::get_country_data() );
$this->asset_data_registry->add( 'displayItemizedTaxes', 'itemized' === get_option( 'woocommerce_tax_total_display' ) );
- $this->asset_data_registry->add( 'displayCartPricesIncludingTax', 'incl' === get_option( 'woocommerce_tax_display_cart' ) );
+ $this->asset_data_registry->add( 'displayCartPricesIncludingTax', TaxDisplayMode::INCLUSIVE === get_option( 'woocommerce_tax_display_cart' ) );
$this->asset_data_registry->add( 'taxesEnabled', wc_tax_enabled() );
$this->asset_data_registry->add( 'couponsEnabled', wc_coupons_enabled() );
$this->asset_data_registry->add( 'shippingEnabled', wc_shipping_enabled() );
diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/Checkout.php b/plugins/woocommerce/src/Blocks/BlockTypes/Checkout.php
index 479a0969668..ce2792016fb 100644
--- a/plugins/woocommerce/src/Blocks/BlockTypes/Checkout.php
+++ b/plugins/woocommerce/src/Blocks/BlockTypes/Checkout.php
@@ -7,6 +7,7 @@ use Automattic\WooCommerce\StoreApi\Utilities\LocalPickupUtils;
use Automattic\WooCommerce\Blocks\Utils\CartCheckoutUtils;
use Automattic\WooCommerce\Blocks\Domain\Services\CheckoutFields;
use Automattic\WooCommerce\Blocks\Package;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
use Automattic\WooCommerce\StoreApi\Utilities\PaymentUtils;
use Automattic\WooCommerce\Blocks\Domain\Services\CheckoutFieldsSchema\Validation;
use Automattic\WooCommerce\Internal\AddressProvider\AddressProviderController;
@@ -479,7 +480,7 @@ class Checkout extends AbstractBlock {
)
);
$this->asset_data_registry->add( 'checkoutShowLoginReminder', filter_var( get_option( 'woocommerce_enable_checkout_login_reminder' ), FILTER_VALIDATE_BOOLEAN ) );
- $this->asset_data_registry->add( 'displayCartPricesIncludingTax', 'incl' === get_option( 'woocommerce_tax_display_cart' ) );
+ $this->asset_data_registry->add( 'displayCartPricesIncludingTax', TaxDisplayMode::INCLUSIVE === get_option( 'woocommerce_tax_display_cart' ) );
$this->asset_data_registry->add( 'displayItemizedTaxes', 'itemized' === get_option( 'woocommerce_tax_total_display' ) );
$this->asset_data_registry->add( 'forcedBillingAddress', 'billing_only' === get_option( 'woocommerce_ship_to_destination' ) );
$this->asset_data_registry->add( 'generatePassword', filter_var( get_option( 'woocommerce_registration_generate_password' ), FILTER_VALIDATE_BOOLEAN ) );
diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/MiniCart.php b/plugins/woocommerce/src/Blocks/BlockTypes/MiniCart.php
index e914481128d..3628e5fa1c6 100644
--- a/plugins/woocommerce/src/Blocks/BlockTypes/MiniCart.php
+++ b/plugins/woocommerce/src/Blocks/BlockTypes/MiniCart.php
@@ -14,6 +14,7 @@ use Automattic\WooCommerce\Blocks\Utils\Utils;
use Automattic\WooCommerce\Blocks\Utils\MiniCartUtils;
use Automattic\WooCommerce\Blocks\Utils\BlockHooksTrait;
use Automattic\WooCommerce\Admin\Features\Features;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
use Automattic\WooCommerce\Blocks\Utils\BlocksSharedState;
use Automattic\WooCommerce\Internal\ComingSoon\ComingSoonHelper;
use Automattic\Block_Delimiter;
@@ -526,7 +527,7 @@ class MiniCart extends AbstractBlock {
$template_part_contents = $this->get_template_part_contents( false );
$template_part_contents = do_blocks( $this->process_template_contents( $template_part_contents ) );
$cart_item_count = $cart ? $cart->get_cart_contents_count() : 0;
- $display_cart_price_including_tax = get_option( 'woocommerce_tax_display_cart' ) === 'incl';
+ $display_cart_price_including_tax = get_option( 'woocommerce_tax_display_cart' ) === TaxDisplayMode::INCLUSIVE;
$cart_item_count = $cart ? $cart->get_cart_contents_count() : 0;
$badge_is_visible = ( 'always' === $product_count_visibility ) || ( 'never' !== $product_count_visibility && $cart_item_count > 0 );
$formatted_subtotal = '';
diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/MiniCartFooterBlock.php b/plugins/woocommerce/src/Blocks/BlockTypes/MiniCartFooterBlock.php
index f04e706d224..ecf14b2cd3a 100644
--- a/plugins/woocommerce/src/Blocks/BlockTypes/MiniCartFooterBlock.php
+++ b/plugins/woocommerce/src/Blocks/BlockTypes/MiniCartFooterBlock.php
@@ -2,6 +2,7 @@
namespace Automattic\WooCommerce\Blocks\BlockTypes;
use Automattic\WooCommerce\Admin\Features\Features;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
/**
* MiniCartFooterBlock class.
@@ -43,7 +44,7 @@ class MiniCartFooterBlock extends AbstractInnerBlock {
$cart = $this->get_cart_instance();
$subtotal_label = __( 'Subtotal', 'woocommerce' );
$other_costs_label = $this->get_totals_item_description();
- $display_cart_price_including_tax = get_option( 'woocommerce_tax_display_cart' ) === 'incl';
+ $display_cart_price_including_tax = get_option( 'woocommerce_tax_display_cart' ) === TaxDisplayMode::INCLUSIVE;
$subtotal = $display_cart_price_including_tax ? $cart->get_subtotal_tax() : $cart->get_subtotal();
$formatted_subtotal = '';
$html = new \WP_HTML_Tag_Processor( wc_price( $subtotal ) );
diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/ProductCollection/QueryBuilder.php b/plugins/woocommerce/src/Blocks/BlockTypes/ProductCollection/QueryBuilder.php
index c58bfaf96dc..c5b4f6a6bbc 100644
--- a/plugins/woocommerce/src/Blocks/BlockTypes/ProductCollection/QueryBuilder.php
+++ b/plugins/woocommerce/src/Blocks/BlockTypes/ProductCollection/QueryBuilder.php
@@ -10,6 +10,7 @@ use Automattic\WooCommerce\Blocks\BlockTypes\StockFilter;
use WP_Query;
use WC_Tax;
use Automattic\WooCommerce\Enums\ProductStockStatus;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
/**
* QueryBuilder class.
@@ -984,7 +985,7 @@ class QueryBuilder {
$base_tax_rates = WC_Tax::get_base_tax_rates( $tax_class );
// If prices are shown incl. tax, we want to remove the taxes from the filter amount to match prices stored excl. tax.
- if ( 'incl' === $tax_display ) {
+ if ( TaxDisplayMode::INCLUSIVE === $tax_display ) {
/**
* Filters if taxes should be removed from locations outside the store base location.
*
@@ -1021,7 +1022,7 @@ class QueryBuilder {
*/
private function should_adjust_price_range_for_taxes() {
$display_setting = get_option( 'woocommerce_tax_display_shop' ); // Tax display setting ('incl' or 'excl').
- $price_storage_method = wc_prices_include_tax() ? 'incl' : 'excl';
+ $price_storage_method = wc_prices_include_tax() ? TaxDisplayMode::INCLUSIVE : TaxDisplayMode::EXCLUSIVE;
return $display_setting !== $price_storage_method;
}
diff --git a/plugins/woocommerce/src/Blocks/Shipping/ShippingController.php b/plugins/woocommerce/src/Blocks/Shipping/ShippingController.php
index 3c71342bba1..a6a84761bdb 100644
--- a/plugins/woocommerce/src/Blocks/Shipping/ShippingController.php
+++ b/plugins/woocommerce/src/Blocks/Shipping/ShippingController.php
@@ -5,6 +5,7 @@ use Automattic\WooCommerce\Blocks\Assets\Api as AssetApi;
use Automattic\WooCommerce\Blocks\Assets\AssetDataRegistry;
use Automattic\WooCommerce\Blocks\Utils\CartCheckoutUtils;
use Automattic\WooCommerce\Enums\ProductTaxStatus;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
use Automattic\WooCommerce\StoreApi\Utilities\LocalPickupUtils;
use Automattic\WooCommerce\Utilities\ArrayUtil;
use WC_Customer;
@@ -136,7 +137,7 @@ class ShippingController {
$tax = $shipping_method->get_total_tax();
// Format cost with tax handling.
- if ( 'excl' === $tax_display ) {
+ if ( TaxDisplayMode::EXCLUSIVE === $tax_display ) {
// Show pickup cost excluding tax.
$formatted_cost = wc_price( $cost, array( 'currency' => $order->get_currency() ) );
if ( (float) $tax > 0 && $order->get_prices_include_tax() ) {
diff --git a/plugins/woocommerce/src/Enums/README.md b/plugins/woocommerce/src/Enums/README.md
index c4d04cc76c3..9bbc90302b9 100644
--- a/plugins/woocommerce/src/Enums/README.md
+++ b/plugins/woocommerce/src/Enums/README.md
@@ -16,6 +16,7 @@ The enum classes make it easier to reference string values and avoid typos. They
- [ProductStockStatus](./ProductStockStatus.php) - Enumerates the possible stock statuses of a product.
- [ProductType](./ProductType.php) - Enumerates the possible types of a product.
- [TaxBasedOn](./TaxBasedOn.php) - Enumerates the possible values of the `woocommerce_tax_based_on` option.
+- [TaxDisplayMode](./TaxDisplayMode.php) - Enumerates the possible values of the `woocommerce_tax_display_shop` and `woocommerce_tax_display_cart` options.
- [WeightUnit](./WeightUnit.php) - Enumerates the possible values of the `woocommerce_weight_unit` option.
## Contributing
diff --git a/plugins/woocommerce/src/Enums/TaxDisplayMode.php b/plugins/woocommerce/src/Enums/TaxDisplayMode.php
new file mode 100644
index 00000000000..819c3695eef
--- /dev/null
+++ b/plugins/woocommerce/src/Enums/TaxDisplayMode.php
@@ -0,0 +1,28 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace Automattic\WooCommerce\Enums;
+
+/**
+ * Enum class for the possible values of the `woocommerce_tax_display_shop` and
+ * `woocommerce_tax_display_cart` options, which control whether prices are
+ * shown including or excluding tax.
+ *
+ * @since 11.0.0
+ */
+final class TaxDisplayMode {
+ /**
+ * Prices displayed including tax.
+ *
+ * @var string
+ */
+ public const INCLUSIVE = 'incl';
+
+ /**
+ * Prices displayed excluding tax.
+ *
+ * @var string
+ */
+ public const EXCLUSIVE = 'excl';
+}
diff --git a/plugins/woocommerce/src/Internal/Email/OrderPriceFormatter.php b/plugins/woocommerce/src/Internal/Email/OrderPriceFormatter.php
index ae122bdccd4..7e96ab5ccc0 100644
--- a/plugins/woocommerce/src/Internal/Email/OrderPriceFormatter.php
+++ b/plugins/woocommerce/src/Internal/Email/OrderPriceFormatter.php
@@ -7,6 +7,7 @@ declare( strict_types = 1 );
namespace Automattic\WooCommerce\Internal\Email;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
use WC_Abstract_Order;
use WC_Order_Item;
@@ -26,7 +27,7 @@ class OrderPriceFormatter {
* @return string Formatted item subtotal.
*/
public static function get_formatted_item_subtotal( WC_Abstract_Order $order, WC_Order_Item $item, string $tax_display ): string {
- $includes_tax = 'excl' !== $tax_display;
+ $includes_tax = TaxDisplayMode::EXCLUSIVE !== $tax_display;
$item_subtotal = $order->get_item_subtotal( $item, $includes_tax );
return self::format_price( $order, $item_subtotal, $includes_tax );
}
diff --git a/plugins/woocommerce/src/Internal/ProductFilters/QueryClauses.php b/plugins/woocommerce/src/Internal/ProductFilters/QueryClauses.php
index cf7f18e15cc..8ae467f36de 100644
--- a/plugins/woocommerce/src/Internal/ProductFilters/QueryClauses.php
+++ b/plugins/woocommerce/src/Internal/ProductFilters/QueryClauses.php
@@ -7,6 +7,7 @@ declare(strict_types=1);
namespace Automattic\WooCommerce\Internal\ProductFilters;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
use Automattic\WooCommerce\Internal\ProductAttributesLookup\LookupDataStore;
use Automattic\WooCommerce\Internal\ProductFilters\Interfaces\QueryClausesGenerator;
use Automattic\WooCommerce\Internal\ProductFilters\Interfaces\MainQueryClausesGenerator;
@@ -451,7 +452,7 @@ class QueryClauses implements QueryClausesGenerator, MainQueryClausesGenerator {
*/
private function should_adjust_price_filters_for_displayed_taxes(): bool {
$display = get_option( 'woocommerce_tax_display_shop' );
- $database = wc_prices_include_tax() ? 'incl' : 'excl';
+ $database = wc_prices_include_tax() ? TaxDisplayMode::INCLUSIVE : TaxDisplayMode::EXCLUSIVE;
return $display !== $database;
}
@@ -522,7 +523,7 @@ class QueryClauses implements QueryClausesGenerator, MainQueryClausesGenerator {
$base_tax_rates = WC_Tax::get_base_tax_rates( $tax_class );
// If prices are shown incl. tax, we want to remove the taxes from the filter amount to match prices stored excl. tax.
- if ( 'incl' === $tax_display ) {
+ if ( TaxDisplayMode::INCLUSIVE === $tax_display ) {
/**
* Filters if taxes should be removed from locations outside the store base location.
*
diff --git a/plugins/woocommerce/src/Internal/StockNotifications/Emails/EmailManager.php b/plugins/woocommerce/src/Internal/StockNotifications/Emails/EmailManager.php
index d32c4758587..abee6708a30 100644
--- a/plugins/woocommerce/src/Internal/StockNotifications/Emails/EmailManager.php
+++ b/plugins/woocommerce/src/Internal/StockNotifications/Emails/EmailManager.php
@@ -4,6 +4,7 @@ declare( strict_types = 1 );
namespace Automattic\WooCommerce\Internal\StockNotifications\Emails;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
use Automattic\WooCommerce\Internal\StockNotifications\Notification;
use Automattic\WooCommerce\Internal\StockNotifications\Factory;
use Automattic\WooCommerce\Internal\StockNotifications\Emails\CustomerStockNotificationEmail;
@@ -103,7 +104,7 @@ class EmailManager {
public function maybe_restore_customer_tax_location_data( $notification ) {
// No need if stores displaying price excluding tax.
- if ( 'incl' !== get_option( 'woocommerce_tax_display_shop' ) ) {
+ if ( TaxDisplayMode::INCLUSIVE !== get_option( 'woocommerce_tax_display_shop' ) ) {
return;
}
diff --git a/plugins/woocommerce/src/StoreApi/Schemas/V1/ProductSchema.php b/plugins/woocommerce/src/StoreApi/Schemas/V1/ProductSchema.php
index a59d00d3406..91ec9ebac16 100644
--- a/plugins/woocommerce/src/StoreApi/Schemas/V1/ProductSchema.php
+++ b/plugins/woocommerce/src/StoreApi/Schemas/V1/ProductSchema.php
@@ -7,6 +7,7 @@ use Automattic\WooCommerce\StoreApi\Schemas\ExtendSchema;
use Automattic\WooCommerce\StoreApi\Utilities\QuantityLimits;
use Automattic\WooCommerce\Blocks\Utils\ProductAvailabilityUtils;
use Automattic\WooCommerce\Enums\ProductStockStatus;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
/**
* ProductSchema class.
@@ -947,7 +948,7 @@ class ProductSchema extends AbstractSchema {
* @return string Valid tax display mode.
*/
protected function get_tax_display_mode( $tax_display_mode = '' ) {
- return in_array( $tax_display_mode, [ 'incl', 'excl' ], true ) ? $tax_display_mode : get_option( 'woocommerce_tax_display_shop' );
+ return in_array( $tax_display_mode, [ TaxDisplayMode::INCLUSIVE, TaxDisplayMode::EXCLUSIVE ], true ) ? $tax_display_mode : get_option( 'woocommerce_tax_display_shop' );
}
/**
@@ -957,7 +958,7 @@ class ProductSchema extends AbstractSchema {
* @return string Function name.
*/
protected function get_price_function_from_tax_display_mode( $tax_display_mode ) {
- return 'incl' === $tax_display_mode ? 'wc_get_price_including_tax' : 'wc_get_price_excluding_tax';
+ return TaxDisplayMode::INCLUSIVE === $tax_display_mode ? 'wc_get_price_including_tax' : 'wc_get_price_excluding_tax';
}
/**
@@ -983,7 +984,7 @@ class ProductSchema extends AbstractSchema {
if ( $product->is_type( ProductType::GROUPED ) ) {
$children = $product->get_visible_children();
- $price_function = 'incl' === $tax_display_mode ? 'wc_get_price_including_tax' : 'wc_get_price_excluding_tax';
+ $price_function = TaxDisplayMode::INCLUSIVE === $tax_display_mode ? 'wc_get_price_including_tax' : 'wc_get_price_excluding_tax';
foreach ( $children as $child ) {
if ( '' !== $child->get_price() ) {
diff --git a/plugins/woocommerce/src/StoreApi/Utilities/ProductQuery.php b/plugins/woocommerce/src/StoreApi/Utilities/ProductQuery.php
index e838b5c683d..6f7ea3ba335 100644
--- a/plugins/woocommerce/src/StoreApi/Utilities/ProductQuery.php
+++ b/plugins/woocommerce/src/StoreApi/Utilities/ProductQuery.php
@@ -6,6 +6,7 @@ namespace Automattic\WooCommerce\StoreApi\Utilities;
use Automattic\WooCommerce\Enums\ProductStatus;
use Automattic\WooCommerce\Enums\ProductType;
use Automattic\WooCommerce\Enums\CatalogVisibility;
+use Automattic\WooCommerce\Enums\TaxDisplayMode;
use Automattic\WooCommerce\Internal\ProductFilters\Interfaces\QueryClausesGenerator;
use Automattic\WooCommerce\Internal\Utilities\ProductUtil;
use Automattic\WooCommerce\StoreApi\Exceptions\RouteException;
@@ -550,7 +551,7 @@ class ProductQuery implements QueryClausesGenerator {
*/
protected function adjust_price_filters_for_displayed_taxes() {
$display = get_option( 'woocommerce_tax_display_shop' );
- $database = wc_prices_include_tax() ? 'incl' : 'excl';
+ $database = wc_prices_include_tax() ? TaxDisplayMode::INCLUSIVE : TaxDisplayMode::EXCLUSIVE;
return $display !== $database;
}
@@ -580,7 +581,7 @@ class ProductQuery implements QueryClausesGenerator {
$base_tax_rates = WC_Tax::get_base_tax_rates( $tax_class );
// If prices are shown incl. tax, we want to remove the taxes from the filter amount to match prices stored excl. tax.
- if ( 'incl' === $tax_display ) {
+ if ( TaxDisplayMode::INCLUSIVE === $tax_display ) {
/**
* Filters if taxes should be removed from locations outside the store base location.
*