# Cart Discounts

WCPOS provides several ways for a cashier to discount an order on the fly: quick percentage buttons, direct line-item price edits, and order-level discount fees. For pre-configured promotions with usage rules, see [Coupons](/coupons/.md) (Pro).

Changed in v1.9.0

The way POS price changes appear on receipts and in reports changed in v1.9.0. See [What changed in v1.9.0](#what-changed-in-v190) below if you've noticed your "Discount" totals on receipts are now showing as zero.

## Quick Discounts[​](#quick-discounts "Direct link to Quick Discounts")

Quick discount buttons let you apply a percentage discount to the entire order with a single tap.

To configure them, open the cart [Display Settings](/pos/cart/.md#display-settings) and enter a comma-separated list of percentages in the **Quick Discounts** field. For example, `5,10,15,20` creates four shortcut buttons.

When you tap a quick discount button, the percentage is applied across all line items in the cart.

## Line-Item Discounts[​](#line-item-discounts "Direct link to Line-Item Discounts")

You can change the price of any individual line item directly in the cart:

1. Click the **Price** field on the line item
2. Enter the new price
3. Press **Enter** to confirm

This is useful for price matching, staff discounts, or one-off adjustments. The line item's total updates automatically based on quantity × new price.

See [Line Items](/pos/cart/line-items.md) for more on editing cart items.

Splitting Items

If a customer wants different discounts on portions of the same product (e.g., 3 at full price and 2 discounted), enable the **Split** option in cart [Display Settings](/pos/cart/.md#display-settings) to break a line item into separate lines.

## Order-Level Discounts[​](#order-level-discounts "Direct link to Order-Level Discounts")

To apply a flat discount to the entire order (rather than individual items), add a **negative fee**:

1. Click **Add Fee** below the cart items
2. Enter a name (e.g., "Staff discount")
3. Enter the discount amount as a negative number (e.g., `-5.00`)

The fee appears as a separate line item and reduces the order total. You can edit the fee's tax status using the three-dot menu if needed.

## POS Discounts vs WooCommerce Coupons[​](#pos-discounts-vs-woocommerce-coupons "Direct link to POS Discounts vs WooCommerce Coupons")

The discounts on this page are ad-hoc adjustments cashiers apply at the till; WooCommerce **coupons** are pre-configured promotions with rules and tracking. Here's how they compare at a glance:

|                      | POS Discounts                                                           | WooCommerce Coupons (Pro)                                                       |
| -------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| **How applied**      | Quick discount, line price edit, or negative fee                        | Enter a coupon code in the cart                                                 |
| **Where configured** | On the fly by the cashier                                               | Pre-configured in **WP Admin → Marketing → Coupons**                            |
| **Tracking**         | Recorded as the line price (see [v1.9.0 change](#what-changed-in-v190)) | Tracked as a coupon discount in WooCommerce reports                             |
| **Restrictions**     | None — the cashier sets any price                                       | Usage limits, product/category restrictions, minimum spend, expiry, email rules |
| **Best for**         | Ad-hoc adjustments, price matching                                      | Structured promotions, trackable discounts                                      |

Which should I use?

For one-off price adjustments, the discounts on this page are simpler. If you need to track discount usage in WooCommerce reports or enforce rules like usage limits, use [Coupons](/coupons/.md).

## How POS Price Changes Interact with Coupons[​](#how-pos-price-changes-interact-with-coupons "Direct link to How POS Price Changes Interact with Coupons")

When a cashier sets a custom price on a line item (e.g., reducing $18 to $16), and a coupon is then applied, the coupon calculates against the **POS-discounted price** ($16), not the original ($18). This prevents customers being over-discounted by stacking a cashier discount and a coupon against the original price.

* POS-discounted items are treated as "on sale" by WooCommerce. If a coupon has **Exclude sale items** enabled, it will skip POS-discounted items — the same way it skips regular sale items. Developers can override this with the `woocommerce_pos_item_is_on_sale` filter.
* Removing a coupon leaves the line at its POS-discounted price.

Developer Reference

For technical details on how POS price overrides are stored and the available filters, see the [POS Discount Reference](/reference/pos-discounts.md).

## What changed in v1.9.0[​](#what-changed-in-v190 "Direct link to What changed in v1.9.0")

If you upgraded from v1.8 and noticed that the **Discount** total on your receipts and reports is now showing **0**, this section explains why and what your options are.

### The change[​](#the-change "Direct link to The change")

Before v1.9.0, when a cashier reduced a line price (e.g., $18 → $16), the POS recorded the order with `subtotal = $18` and `total = $16`. WooCommerce then computed `discount_total = $2`, and this appeared on your receipt and in reports as a discount.

This caused incorrect totals whenever a coupon was applied on top — the coupon would calculate against the original $18, leading to an over-discount and the customer being undercharged.

From v1.9.0, WCPOS aligns with how WooCommerce treats sale prices: the price you set at the till **is** the line subtotal. WooCommerce only counts coupon codes as "discounts" (this matches WC's behavior for products on sale, where the sale price is also baked into the subtotal with no separate discount line).

### What this means for you[​](#what-this-means-for-you "Direct link to What this means for you")

* **Receipts** no longer show a separate "Discount" line for line-item price changes. The lower price is the price.
* **Reports** show `discount_total = 0` when only POS line-item price changes were used. Only coupon discounts are counted.
* **Coupons** now calculate correctly when stacked on POS-discounted items.
* **The discount data is still stored** on every order in line-item metadata (`_woocommerce_pos_data`), so historical figures can still be derived if needed.

### If you want discount visibility back[​](#if-you-want-discount-visibility-back "Direct link to If you want discount visibility back")

If you need a "total discount given today" figure for your end-of-day reconciliation, the supported way is to use [Coupons](/coupons/.md) instead of line-item price edits for trackable discounts. Set up a "Manager 10%" or "Loyalty $5" coupon in **Marketing → Coupons**, and apply it at the cart. It'll show in your reports natively.

We're also evaluating a POS-specific "Total Saved" figure that surfaces line-item price changes separately from coupon discounts. If this matters to your workflow, [let us know](https://wcpos.com/support).

## Known Limitations[​](#known-limitations "Direct link to Known Limitations")

* **No automatic discount rules** — the POS doesn't support "buy 2, get 1 free" style automatic discounts. Use WooCommerce coupons for structured promotions.
* **Quick discounts are percentage-only** — there's no built-in quick button for fixed-amount discounts. Use a negative fee or edit individual prices instead.
