Commit b4b7450446e for woocommerce
commit b4b7450446e7f2fa9e2e2800c7301cd43957df78
Author: verofasulo <98944206+verofasulo@users.noreply.github.com>
Date: Fri May 15 11:26:43 2026 +0200
Remove the 'On sale' toggle and always show the sale price field (#64995)
The 'On sale' boolean toggle gated whether the sale price field was
visible. Removing the toggle and showing the sale price field by
default lets the presence of a sale price drive the on-sale state
directly, simplifying the form and matching how merchants think about
this — entering a sale price means the product is on sale.
- Drop 'on_sale' from the simple, variation, and external product
edit form lists.
- Remove the conditional isVisible from the sale_price field so it
always renders alongside regular_price.
- Update form-order assertions in utils.test.ts to match the new
layout.
diff --git a/packages/js/experimental-products-app/changelog/update-always-show-sale-price b/packages/js/experimental-products-app/changelog/update-always-show-sale-price
new file mode 100644
index 00000000000..07964bb2272
--- /dev/null
+++ b/packages/js/experimental-products-app/changelog/update-always-show-sale-price
@@ -0,0 +1,4 @@
+Significance: minor
+Type: update
+
+Remove the "On sale" toggle from the product editor and always show the sale price field
diff --git a/packages/js/experimental-products-app/src/fields/sale_price/field.tsx b/packages/js/experimental-products-app/src/fields/sale_price/field.tsx
index c13def90fa7..6bc99bcc875 100644
--- a/packages/js/experimental-products-app/src/fields/sale_price/field.tsx
+++ b/packages/js/experimental-products-app/src/fields/sale_price/field.tsx
@@ -24,9 +24,6 @@ const fieldDefinition = {
export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
...fieldDefinition,
- isVisible: ( item ) => {
- return !! item.on_sale || !! item.sale_price;
- },
isValid: {
custom: ( item ) => validateSalePrice( item ),
},
diff --git a/packages/js/experimental-products-app/src/product-edit/utils.test.ts b/packages/js/experimental-products-app/src/product-edit/utils.test.ts
index c9656c5b737..69373177989 100644
--- a/packages/js/experimental-products-app/src/product-edit/utils.test.ts
+++ b/packages/js/experimental-products-app/src/product-edit/utils.test.ts
@@ -308,13 +308,12 @@ describe( 'product edit utils', () => {
const priceFieldIds = [
'price',
'regular_price',
- 'on_sale',
'sale_price',
'schedule_sale',
'date_on_sale_from',
'date_on_sale_to',
];
- const basePriceFieldIds = [ 'regular_price', 'on_sale' ];
+ const basePriceFieldIds = [ 'regular_price', 'sale_price' ];
const managedStockFieldIds = [ 'manage_stock', 'stock_quantity' ];
const stockStatusFieldIds = [ 'stock', 'manage_stock' ];
const shippingFieldIds = [
@@ -350,7 +349,6 @@ describe( 'product edit utils', () => {
'product_status',
'catalog_visibility',
'regular_price',
- 'on_sale',
'sale_price',
'images',
'sku',
@@ -402,11 +400,7 @@ describe( 'product edit utils', () => {
} ),
] );
- expectFieldOrder( fieldIds, [
- 'regular_price',
- 'on_sale',
- 'sale_price',
- ] );
+ expectFieldOrder( fieldIds, [ 'regular_price', 'sale_price' ] );
} );
it( 'hides shipping fields for virtual simple products', () => {
@@ -501,7 +495,7 @@ describe( 'product edit utils', () => {
'product_status',
'catalog_visibility',
'regular_price',
- 'on_sale',
+ 'sale_price',
'images',
'external_url',
'button_text',
@@ -513,7 +507,6 @@ describe( 'product edit utils', () => {
] );
expectFieldsHidden( fieldIds, [
'price',
- 'sale_price',
'schedule_sale',
'date_on_sale_from',
'date_on_sale_to',
@@ -536,7 +529,6 @@ describe( 'product edit utils', () => {
expectFieldsHidden( fieldIds, [
'price',
'regular_price',
- 'on_sale',
'sale_price',
'schedule_sale',
'date_on_sale_from',
@@ -627,7 +619,6 @@ describe( 'product edit utils', () => {
expect.arrayContaining( basePriceFieldIds )
);
expectFieldsHidden( fieldIds, [
- 'sale_price',
'schedule_sale',
'date_on_sale_from',
'date_on_sale_to',
@@ -651,7 +642,6 @@ describe( 'product edit utils', () => {
expect( fieldIds ).toEqual(
expect.arrayContaining( [
'regular_price',
- 'on_sale',
'sale_price',
'images',
'sku',
@@ -689,7 +679,6 @@ describe( 'product edit utils', () => {
'images',
'sku',
'regular_price',
- 'on_sale',
'sale_price',
'stock',
'manage_stock',
@@ -767,7 +756,6 @@ describe( 'product edit utils', () => {
expect( fieldIds ).toEqual(
expect.arrayContaining( [
'regular_price',
- 'on_sale',
'sale_price',
...bulkSellableInstanceFieldIds,
] )
@@ -953,7 +941,6 @@ describe( 'product edit utils', () => {
'product_status',
'catalog_visibility',
'regular_price',
- 'on_sale',
'sale_price',
'images',
'downloadable',
@@ -984,7 +971,6 @@ describe( 'product edit utils', () => {
expect( getProductTypeFormFields( [ product ] ) ).toEqual( [
'regular_price',
- 'on_sale',
'sale_price',
'images',
'downloadable',
diff --git a/packages/js/experimental-products-app/src/product-edit/utils.ts b/packages/js/experimental-products-app/src/product-edit/utils.ts
index 77453d63940..9c1c4893f0a 100644
--- a/packages/js/experimental-products-app/src/product-edit/utils.ts
+++ b/packages/js/experimental-products-app/src/product-edit/utils.ts
@@ -88,7 +88,6 @@ const SIMPLE_PRODUCT_EDIT_FORM_FIELDS = [
'product_status',
'catalog_visibility',
'regular_price',
- 'on_sale',
'sale_price',
'images',
'downloadable',
@@ -105,7 +104,6 @@ const SIMPLE_PRODUCT_EDIT_FORM_FIELDS = [
const VARIATION_PRODUCT_EDIT_FORM_FIELDS = [
'regular_price',
- 'on_sale',
'sale_price',
'images',
'downloadable',
@@ -144,7 +142,6 @@ const EXTERNAL_PRODUCT_EDIT_FORM_FIELDS = [
'product_status',
'catalog_visibility',
'regular_price',
- 'on_sale',
'sale_price',
'images',
'external_url',