Skip to main content
A discount belongs to an item. Each item works out a source price and applies its own discount, which gives a unit price. The preset’s total is the sum of its lines, and nothing is taken off after that.

Where the base price comes from

Use the regular price instead of the sale price, under an item’s In the cart panel, stops a sale and a preset discount stacking into a margin nobody agreed to. If a product is on sale at 20% off and you put it in a preset at 20% off, you probably meant 20% off in total, not both. A sale price only counts while the sale is running, by WooCommerce’s own sale dates. A sale scheduled for next week, or one that has ended, gives the regular price, just as the product costs when it’s added on its own. The editor and the listing quote the same price the cart charges today. Custom items don’t have this switch, because they have no sale price.

Per-item discounts

Everything is clamped to zero. A 50 fixed discount on a 45 product gives 0, never −5. A price or discount amount can be up to 1,000,000,000 in your store’s currency. A save with anything larger is refused on the item that holds it.
A fixed amount is taken off each unit, the same way a percentage is. Two of an item at 5 off is 10 off, not 5.
The value’s label follows the type: Percent off, Amount off or Custom price. The health checks flag a discount type chosen with no amount, as a warning rather than a blocking check.

The summary agrees with the cart

The editor’s Pricing summary is worked out in your browser, so it can update as you type. The cart’s price is worked out in PHP. Both sides run against the same table of test cases. If a formula changes on one side and not the other, a test fails before the cart can charge the wrong amount. If the editor and the cart ever disagree, that’s a bug. Please report it.

Prices are never cached

Item definitions are cached. Prices never are. A cached price goes stale as soon as you edit a product, run a sale or change a tax rate, and a stale price in a cart is a wrong charge. Every figure is worked out from live product prices at the moment it’s needed, including the Price column in the listing. On the free version, that column and the editor’s summary leave out custom items, because the free version doesn’t add them to the cart. The same goes for a cart that already holds a preset. It’s priced by the preset’s current settings, so a discount you change reaches carts that already hold it. See Cart behaviour.

Coupons on top

Store coupons are refused on preset items by default, per item. Turn on Allow coupon discounts on this item where you want them to stack. See Items. A preset can also apply a coupon of its own, automatically, as soon as the link is followed. See Automatic coupons.

Subscriptions

With a subscription product you have to decide whether the discount covers the first payment only or every renewal. The free version discounts every payment for as long as the subscription runs, with the sign-up fee charged. Pro does the same by default, and lets you limit the discount to a set number of payments, or waive the fee, per item. See Subscriptions.
Last modified on September 28, 2026