Discounts and Coupons
WCPOS gives you several ways to discount an order. The free plugin covers ad-hoc cashier discounts (quick percentages, line-item price changes, order-level fees). Coupon codes — including all the WooCommerce coupon rules — are part of WCPOS Pro.
The way POS price changes appear on receipts and in reports changed in v1.9.0 so that coupons calculate correctly. See What changed in v1.9.0 below if you've noticed your "Discount" totals are now showing as zero.
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 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
You can change the price of any individual line item directly in the cart:
- Click the Price field on the line item
- Enter the new price
- 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 for more on editing cart 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 to break a line item into separate lines.
Order-Level Discounts
To apply a flat discount to the entire order (rather than individual items), add a negative fee:
- Click Add Fee below the cart items
- Enter a name (e.g., "Staff discount")
- 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.
Coupon Codes Pro
Coupon support is a WCPOS Pro feature. With Pro installed, the POS syncs coupons from WooCommerce and lets you apply them at the register.
Setting up coupons
Coupons are created and managed in WooCommerce, not in the POS:
- Go to WP Admin → Marketing → Coupons and create your coupons there
- The POS syncs them automatically — they're then available at the register
You can use all the standard WooCommerce coupon rules: expiry dates, usage limits, minimum/maximum spend, individual-use, email restrictions, product or category restrictions, and "exclude sale items."
Applying a coupon at the register
- In the cart, click Add Coupon
- Enter the coupon code
- Press Enter
The POS validates the coupon locally against your synced coupon list (so it's instant — no waiting on the server) and applies the discount to the cart. If you change cart contents afterwards, the discount recalculates automatically.
Coupon codes are case-insensitive.
Supported coupon types
| Coupon type | Supported |
|---|---|
| Percentage discount | Yes |
| Fixed cart discount | Yes |
| Fixed product discount | Yes |
Coupons and connectivity
Because coupons are validated locally from synced data, you can apply them while offline. However, completing checkout still requires a connection — the server is the authoritative source of order totals and runs final validation on submission.
If a coupon was just created in WooCommerce and you don't see it in the POS yet, wait for the next sync cycle or navigate away from the cart and back to trigger a refresh.
POS Discounts vs WooCommerce Coupons
These are two different mechanisms, and it's worth understanding the distinction:
| POS Discounts | WooCommerce Coupons (Pro) | |
|---|---|---|
| How applied | Edit the line item price, use a quick discount, or add a 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) | 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 |
If you need to track discount usage in WooCommerce reports or enforce rules like usage limits, use coupons. For one-off price adjustments, POS discounts are simpler.
How POS Discounts 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 means a customer cannot be 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_salefilter. - Removing a coupon leaves the line at its POS-discounted price.
For technical details on how POS price overrides are stored and the available filters, see the POS Discount Reference.
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
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
- Receipts no longer show a separate "Discount" line for line-item price changes. The lower price is the price.
- Reports show
discount_total = 0when 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 need a "total discount given today" figure for your end-of-day reconciliation, the supported way is to use coupon codes 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 discount_total 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.
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.
- Checkout requires a connection — coupons can be applied offline (they're validated against locally-synced data), but you can't complete the sale without server connectivity.