WooCommerce Coupon Not Working: Restrictions and Fixes
A rejected coupon is usually doing exactly what it was configured to do. Read the error message, then check expiry, minimum spend, product restrictions and usage limits in that order.
Read the message the customer sees. WooCommerce is specific about why it refused a coupon, and the wording maps directly to a setting. Reproduce the failure yourself in a private window with the same cart contents before changing anything.
Match the message to the setting
| Message | Setting to check |
|---|---|
| "Coupon does not exist" | Code typo, or the coupon is a draft or trashed |
| "This coupon has expired" | Expiry date — it expires at the start of that day |
| "The minimum spend for this coupon is …" | Minimum spend, calculated on the subtotal |
| "Sorry, this coupon is not applicable to your cart contents" | Product, category or sale-item restrictions |
| "Coupon usage limit has been reached" | Usage limit per coupon or per user |
| "Sorry, coupon … has already been applied" | Individual use only |
| "Please enter a coupon code" | The field is submitting empty — caching or JavaScript |
The restrictions that catch people out
Open the coupon under Marketing → Coupons and work through the Usage restriction tab.
Expiry date. WooCommerce treats the expiry as the last full day being over — a coupon expiring on the 30th stops working at the start of the 30th, not the end. Set it one day later than you intend.
Minimum spend. Calculated on the cart subtotal, before shipping and tax. A customer at £49.90 for a £50 minimum is refused, which is correct but often surprising.
Exclude sale items. If ticked, the coupon is refused for any cart containing a product on sale. On a store running promotions this rejects most carts.
Products and categories. "Products" restricts the coupon to those items; "Exclude products" does the opposite. A coupon with a product restriction is refused entirely when the cart contains none of them.
Allowed emails. Restricts by billing email, matched exactly. A customer checking out with a different address is refused.
Usage limits
Under the Usage limits tab:
- Limit per coupon — total redemptions across all customers.
- Limit per user — matched by email address and, for logged-in customers, by account.
Two things worth knowing. Guest checkouts are matched on email only, so a guest using a different address bypasses a per-user limit. And a coupon can appear "used up" because failed or cancelled orders consumed redemptions — check the coupon's usage count against actual completed orders.
Individual use only
If one coupon has this enabled, no other coupon can be applied alongside it. It is the standard reason customers report that "only one code works".
Decide deliberately: stacking discounts is a business decision, and the setting is per coupon rather than global.
When the coupon field itself misbehaves
If applying a coupon does nothing, reloads without a message, or reports an empty code:
- Caching. Cart and checkout must never be served from a page cache. Verify the exclusions, per choosing a cache plugin.
- JavaScript. Check the console. Script combination or deferral commonly breaks the cart's AJAX updates — the same failure mode as WooCommerce products not showing.
- A stale nonce. A cached cart page submits an expired token, and WooCommerce rejects the request silently.
- The coupon field is disabled. Under WooCommerce → Settings → General, "Enable the use of coupon codes" can be off entirely.
Coupons and the block-based cart and checkout
The Cart and Checkout blocks handle coupons differently from the classic shortcode pages. If coupons work on one and not the other, check which the store is using and test both.
Some extensions that hook into coupon validation only support the classic pages, which produces a coupon that validates in the admin and fails on the front end.
Debug a specific case
Reproduce with the exact cart contents, then check in order:
- Is the coupon published, not draft or trashed?
- Does the cart subtotal exceed the minimum spend?
- Does the cart contain a restricted or excluded product?
- Is any item on sale, with sale items excluded?
- Has the usage limit been reached?
- Is another coupon already applied with individual use?
- Does the billing email match an allowed-emails restriction?
If everything above passes and the coupon is still refused, test with a default theme and non-essential plugins disabled on staging — a discount or pricing extension filtering coupon validity is the remaining candidate.
Before launching a campaign
- Test the coupon end to end as a customer, with a real product in the cart.
- Test it with a sale item, if any of your catalogue is discounted.
- Test the limits by using it twice.
- Check the expiry date behaviour by setting it a day beyond the campaign end.
- Confirm the confirmation email shows the discount correctly — if order emails are not arriving at all, see WooCommerce emails not sending.
Frequently asked
- The code is wrong, the coupon is a draft rather than published, or it was trashed. Coupon codes are stored lowercase, but matching is case-insensitive, so capitalisation is not the cause.
- Because at least one applied coupon has 'Individual use only' enabled, which blocks every other coupon in the same order.
- Only if 'Exclude sale items' is unticked in the coupon's usage restrictions. That setting catches out more store owners than any other.