WooCommerce coupon not working? A checklist from the most common cause

A WooCommerce coupon usually fails because of its conditions, not the code itself. Check in order: is the coupon published with the right expiry date, does it exclude sale items, does the basket meet the minimum, has the usage limit run out. When the code goes through but the discount is €0, free shipping without a coupon-enabled method is often to blame.

Author: The TellMyShop team. A guide for WordPress site and WooCommerce store owners: the cause, the manual fix and the same work in a chat conversation.
Last updated: · 8 min read

Before you start: note exactly what the customer sees

The list below runs from the most common cause to the rarest. You'll get there faster if you first answer three questions. What code did the customer type, letter by letter? What was in the basket? Did a message appear, or was the discount simply €0?

Letter case doesn't matter, because WooCommerce treats “AUTUMN10” and “autumn10” the same. A space at the end of a copied code usually doesn't get in the way either. A zero instead of the letter O in a code printed on a flyer does.

The simplest test is to repeat the purchase yourself: add the same products to the basket, enter the same code and go to checkout. Do it in a private window, without being logged in as an administrator.

Checklist: WooCommerce coupon not working

  1. The coupon is a draft or in the bin. Go to Marketing → Coupons and check its status. A code saved as a draft doesn't work in the store.
  2. The expiry date has passed or was entered wrongly. WooCommerce switches the coupon off at midnight at the start of the day you entered. A code dated 30 November no longer works on 30 November. It's a common mistake with “until the end of the month” promotions.
  3. The coupon excludes sale items. Usage restriction has a box that excludes discounted products. In sale season most of the basket may be discounted, so the code has nothing to reduce.
  4. The basket doesn't meet the minimum. The minimum spend applies to the value of products, not delivery. A customer with a €195 basket and €15 delivery won't meet a €200 minimum.
  5. The coupon only applies to selected products or categories. If the code covers the Lanterns category and the customer buys Garden lighting, no discount is applied. The same goes for excluded products and categories.
  6. The usage limit has run out. A total limit of 100 uses on a newsletter code runs out faster than you'd think. The coupon list shows the number of uses next to the limit.
  7. Per-customer limit or an allowed emails list. For customers without an account, WooCommerce checks these conditions only at checkout, using the billing email. The code works in the basket and disappears at the last step.
  8. The coupon can't be combined with others. When the customer already has another code in the basket and one of them is marked “Individual use only”, the second drops out.
  9. Free shipping without a coupon-enabled method. A coupon with “Allow free shipping” ticked only works if the “Free shipping” method in the customer's zone accepts a coupon. Without that, the code is accepted and the discount is €0.
  10. Coupons turned off in store settings. WooCommerce → Settings → General has an option to enable coupon codes. When it's off, the customer doesn't even see the code field.

If all of that checks out and the code still behaves oddly for only some customers, the problem may be page caching of the basket. The basket and checkout should never be cached. That's a hosting or caching plugin setting, so it's for whoever looks after your site to check.

Symptom and cause: what the basket message tells you

What the customer seesMost common causeWhere to check
Message that the coupon doesn't existtypo, coupon in draft or in the binMarketing → Coupons, coupon status
Message that the coupon has expiredexpiry date set to a day the code should still workcoupon's General tab
Message about the minimum spendproduct value below the minimum, delivery not countedUsage restriction
Message that the coupon isn't valid for sale itemssale items excludedUsage restriction
Message that the coupon isn't valid for the selected productsproduct or category listUsage restriction
Code accepted, €0 discount, delivery still chargedfree shipping without a coupon-enabled methodWooCommerce → Settings → Shipping
Code accepted in the basket, gone at checkoutper-customer limit or allowed emailsUsage limits and Usage restriction

Exact descriptions of the fields are in the WooCommerce coupon management documentation, and the free shipping requirements in the Free Shipping method guide. Wphocus has a write-up of the same restrictions in Polish.

Code accepted, discount €0: the two most confusing cases

The first is a free shipping coupon. The owner creates a code with free shipping ticked and a discount amount of 0. In the shipping zones, though, the “Free shipping” method requires “a minimum order amount”, not “a valid free shipping coupon”. WooCommerce accepts the code, shows a €0 discount and still adds the courier. The fix is in the method settings: the coupon requirement, or “a minimum order amount OR a coupon”.

The second is a sale running at the same time as a code. You set sale prices on a whole category, and send a 10% off code to the newsletter with sale items excluded. The customer's basket holds only discounted items, so the code has nothing to reduce. Decide whether the code should combine with the sale, and set it deliberately. How to schedule sale dates is in the guide to the WooCommerce sale schedule.

If you advertise the code as a price reduction on products, check whether you need to show the lowest price from the previous 30 days. In the EU this comes from the Omnibus Directive, and if in doubt, a lawyer will settle it. WooCommerce doesn't show that price on its own; a separate plugin does.

How the chat checks a coupon and fixes its conditions

The TellMyShop plugin for WordPress and WooCommerce reads a coupon with all its conditions at once: date, discount type, minimum, product and category lists, limits and number of uses. Your chat (Claude or ChatGPT) can't see the customer's basket, but it compares the conditions with what the customer described and points to the cause.

You: A customer entered AUTUMN10 and got a message that the coupon isn't valid for sale items. She had two lanterns in her basket.

Your chat: I checked the AUTUMN10 coupon. 10% off, expires 2026-11-01, used 34 times out of 200. The coupon excludes sale items, and both lanterns in the basket have a sale price today. I suggest one of two changes. First: the coupon also covers discounted products. Second: you leave the coupon as it is and tell the customer the code doesn't combine with the sale.

You: Keep the exclusion, but extend the coupon to the end of November.

Your chat: Preview of the change. The code should work all through 30 November, so I'm entering the day after.

The coupon has already been used 34 times. The change applies from now and doesn't affect orders already placed. I'll save it after your ‘yes’.

Card status: waiting for your “yes”
change preview

old version: expires: 2026-11-01

new version: expires: 2026-12-01

Illustration: products, numbers and replies are examples.

Changes to coupons, prices, sales, stock and shipping need the Sales switch. It stays off in the plugin until you turn it on yourself in the plugin panel. In TellMyShop Pro the chat reads coupons even without the switch. In TellMyShop Free it can't read them, because that version reads only ready reports. It does check the products, though: which are on sale, which categories they're in and whether customers can see them at all.

In TellMyShop Pro with the Sales switch on, the chat changes coupon conditions and creates new codes and batches of up to 50 single-use codes with the same conditions. Every save starts with a “before → after” preview. The preview also warns about traps: a code with no usage limit or no expiry date, a fixed discount equal to or higher than the basket minimum, a free shipping coupon without a matching method. Only a coupon that has never been used can be deleted. A used one you end with an expiry date, so the order history stays consistent. You can undo most changes from the change history.

Read more about what the chat does in your store on the TellMyShop for WordPress and WooCommerce page, and licence prices are on the pricing page.

How to avoid this problem at your next promotion

Before sending a code in a newsletter, make one test purchase in a private window. Set the expiry date with a day to spare. Give codes a total usage limit, because newsletter codes end up on coupon sites. Note in the coupon's internal description which campaign it's for, so you're not guessing six months later.

A plan for a whole coupon campaign is in the guide to Black Friday in WooCommerce. When the campaign ends, go through active coupons and end the ones meant only for the promotion. More store guides are on the blog.

Questions and answers

Until when does a coupon with a 30 November expiry date work?

Until the end of 29 November. WooCommerce switches the coupon off at midnight at the start of the day you enter in the expiry date field. If the code should work all through 30 November, enter 1 December.

Why doesn't the discount code work on sale items?

The coupon has “Exclude sale items” ticked. Such a code only reduces products at their regular price. When the basket holds only discounted items, WooCommerce rejects the code, or the discount covers only part of the basket.

A customer entered a free shipping code and still pays for delivery. What's wrong?

Most often no “Free shipping” method in the shipping zones accepts a coupon. The code is accepted, the discount is €0 and the basket still charges for delivery. In the free shipping method settings, choose a requirement that includes a coupon.

The code works in the basket but disappears at checkout. Why?

WooCommerce checks some conditions only at checkout, once it knows the customer's email address. These are the per-customer usage limit and the allowed emails restriction. If the customer has already used the code or gave an email that isn't on the list, the discount disappears at the last step.

Can the chat check a coupon in TellMyShop Free?

No. TellMyShop Free reads only ready reports, and coupons aren't among them. The chat can check the products, though: whether they're on sale, which categories they're in and whether they're visible. TellMyShop Pro reads coupons, and fixes them once you turn on the Sales switch in the plugin panel.

WordPress is a trademark of the WordPress Foundation. WooCommerce is a trademark of Automattic Inc. Claude is a trademark of Anthropic PBC. ChatGPT and OpenAI are trademarks of OpenAI. TellMyShop is not affiliated with these companies.

TellMyShop for WordPress and WooCommerce

Your chat reads the site, shows every change before saving it and saves only after your yes. You can undo most changes with one sentence. Works with Claude or ChatGPT, free accounts included.

Read next