WooCommerce Coupon Code Not Working: 12 Reasons and How to Fix Each
WooCommerce Troubleshooting
Your Coupon Code Isn’t Broken. But Something Specific Is.
When a WooCommerce coupon code stops working, the cause is almost always one of a small set of silent failure modes. Here are the 12 most common ones โ with exactly where to check and what to change.
The most common reasons a WooCommerce coupon code stops working are an expired date, a usage limit reached, products excluded from the coupon, the “exclude sale items” toggle enabled, or a plugin conflict overriding the discount. None of these show a helpful error message โ WooCommerce typically just says “coupon is not valid” and leaves the customer wondering what went wrong. Here are the 12 most common causes and how to diagnose each one.
Why WooCommerce coupon errors are so hard to diagnose
WooCommerce’s coupon system has a lot of moving parts. A single coupon can have expiry dates, usage caps, spend thresholds, product restrictions, category exclusions, email locks, and stacking rules โ each of which can independently cause the coupon to fail at checkout.
What makes this genuinely frustrating is that WooCommerce’s error messages are deliberately vague. “Coupon is not valid” or “Sorry, this coupon is not applicable to your cart contents” doesn’t tell the customer โ or you โ which of those conditions tripped. You have to check them one by one.
The good news is that there are only 12 realistic culprits, and most of them take under a minute to confirm. Work through them in order.
1. The coupon has expired
A WooCommerce coupon with an expiry date stops accepting redemptions at the end of that date โ but the exact moment depends on your store’s timezone setting, not the customer’s local time. If your store is set to UTC and the customer is in a different timezone, the coupon may appear valid on their end but fail at checkout because the server has already moved past midnight.
Where to check
Go to WooCommerce → Coupons, open the coupon, and look at the Usage Restriction tab. The “Coupon expiry date” field shows when redemptions stop. Cross-reference this against your store’s timezone: Settings → General → Timezone.
How to fix it
If the coupon expired earlier than intended, extend the date. If it expired correctly but customers are confused, consider building a 24-hour buffer into future coupons โ set the expiry to the day after you intend to end the promotion. And check your store timezone if customer reports are coming from different regions: a timezone mismatch between your server and your marketing copy is a common source of “it expired too early” complaints.
2. The usage limit has been reached
WooCommerce coupons support two types of usage limits: a total redemption cap across all customers, and a per-customer limit. Either can stop a coupon from working silently once the cap is hit. A coupon set to “100 uses” that was distributed to an email list of 3,000 people will stop working for the remaining 2,900 the moment the 100th person checks out.
Where to check
Open the coupon in WooCommerce → Coupons, then go to the Usage Limits tab. You’ll see three fields:
- Usage limit per coupon: total times this code can be used across all customers.
- Limit usage to X items: how many individual items in the cart the discount applies to.
- Usage limit per user: how many times a single customer account can redeem the code.
Below those fields you’ll see “Usage count” โ the number of times the coupon has already been redeemed. If this matches the limit, the coupon is exhausted.
How to fix it
Increase the usage limit, or set it to blank (unlimited) if you want no cap. If the per-user limit is blocking a genuine repeat customer, you can raise that too. For future campaigns, think about whether the limit should be set tighter or looser than you initially estimated โ unlimited coupons on a shared code carry real abuse risk once the code escapes into the wild.
3. The minimum spend requirement isn’t met
Many coupons are configured with a minimum cart subtotal โ the coupon only applies once the cart reaches a certain dollar amount. If a customer’s cart total is $48 and the minimum spend is $50, the coupon fails. WooCommerce will say something like “The minimum spend for this coupon is $50.00” โ this one at least produces a slightly more helpful error.
Where to check
Open the coupon, go to the Usage Restriction tab, and check the “Minimum spend” field. Then look at what counts toward that minimum: in WooCommerce, the minimum spend calculation is based on the cart subtotal before taxes and shipping by default. A customer who adds $50 of products but whose subtotal after a previously-applied discount is $47 will still fail the check. The minimum is calculated after any discounts already applied to cart items, not on the raw product total.
How to fix it
If the threshold is intentional, no change needed โ the coupon is working correctly. If the threshold is misconfigured or set higher than you intended, lower it. If customers are confused about why their cart total doesn’t seem to qualify, check whether another discount is reducing the subtotal below the threshold before the coupon applies.
4. The maximum spend has been exceeded
Less well-known than the minimum spend, WooCommerce coupons also support a “Maximum spend” field that caps the cart value at which the coupon is valid. A customer with a $300 cart won’t be able to apply a coupon configured with a $200 maximum. This is rarely set intentionally, but it can get enabled by accident โ particularly if someone fills in the wrong field when building a coupon.
Where to check
Open the coupon, go to the Usage Restriction tab, and check the “Maximum spend” field. If it has a value in it, that’s your ceiling. Carts above that value will be rejected.
How to fix it
Clear the maximum spend field entirely if you don’t intend to cap the cart value. If you do want to set a ceiling (for margin protection on very large orders), make sure the value is set deliberately and that your marketing copy reflects it clearly โ “valid on orders under $X” โ so customers aren’t surprised.
5. The coupon is restricted to specific products not in the cart
WooCommerce coupons can be restricted to specific products or product categories. When a coupon is product-restricted, it will only apply if at least one qualifying product is in the cart. A customer whose cart contains items that don’t match the restriction will get a “coupon is not applicable” error even if they have a valid code.
Where to check
Open the coupon, go to Usage Restriction, and look at the “Products” and “Product categories” fields. If either field has entries, the coupon is scoped to those specific items. A completely different product in the cart won’t make the coupon apply.
How to fix it
If the product restriction is intentional, confirm that the customer actually has a qualifying product in their cart. If the restriction is too narrow, add more products or categories to the allowed list. If you want the coupon to work storewide, clear both restriction fields entirely.
The “fixed product discount” type works differently
If the coupon type is “Fixed product discount” (rather than “Fixed cart discount”), the discount applies to specific products at the line-item level, not the whole cart. A customer with a mix of qualifying and non-qualifying items will see the discount apply to qualifying items only โ the rest are untouched. This can look like the coupon “partially doesn’t work” but is actually correct behavior.
6. Products or categories are excluded from the coupon
The inverse of reason #5: a coupon that applies broadly to the store can still exclude specific products or categories. If all items in the customer’s cart fall into an excluded category โ say, the coupon excludes “New Arrivals” and the cart contains only new arrival products โ the coupon will fail entirely. This is one of the more invisible failure modes because the customer has no way of knowing which products are excluded.
Where to check
Open the coupon, go to Usage Restriction, and scroll past the “Products” and “Product categories” fields to the “Exclude products” and “Exclude categories” fields. Any entries there will silently block the coupon for matching cart items.
How to fix it
Remove the exclusion if it was set in error. If the exclusion is deliberate (protecting margin on certain product lines), consider whether your marketing copy makes that clear โ “not valid on new arrivals” in the promotion email prevents the confused support ticket from arriving. WooCommerce does not automatically tell customers which items are excluded from a coupon.
7. “Exclude sale items” is enabled
This is the most common silent killer of WooCommerce coupons, and it catches store owners more than any other setting. The “Exclude sale items” checkbox on every coupon prevents the coupon from applying to any product that currently has a sale price set โ including products discounted by a campaign plugin. The customer enters a perfectly valid code. The cart contains products that are already on sale. The coupon silently refuses to apply.
The reason it’s so easy to miss: many store owners check “Exclude sale items” without fully thinking through what counts as a “sale item.” If you run seasonal campaigns, use a discount plugin, or have products with manually set sale prices, you may have far more “sale items” in your catalog than you realize โ and a coupon with this setting will quietly fail for a large percentage of checkouts.
Where to check
Open the coupon, go to Usage Restriction, and look for the “Exclude sale items” checkbox. If it’s ticked, the coupon will not apply to any product that currently has a sale price in WooCommerce’s price system, regardless of whether that sale price came from manual editing, a scheduled sale, or a discount plugin.
How to fix it
Uncheck “Exclude sale items” if you want the coupon to work regardless of whether items are on sale. If you genuinely want to prevent coupon stacking on already-discounted products, leave it enabled โ but be aware that every product touched by a campaign or sale price will be excluded. A safer approach for margin protection is to use the “Exclude products” or “Exclude categories” fields for specific items you want to protect, rather than a blanket sale-item exclusion.
“Exclude sale items” affects campaign-discounted products too
If you’re using a discount campaign plugin that applies prices via WooCommerce’s sale price field, every product in an active campaign counts as a “sale item.” A coupon with “Exclude sale items” enabled will fail for all of them โ even if you intended the coupon to be a separate, stackable offer. This interaction is a frequent source of confusion when coupons and campaigns run simultaneously. Check your campaign plugin’s documentation to understand how its discounts interact with this coupon setting.
8. The coupon is restricted to specific email addresses
WooCommerce coupons can be locked to one or more email addresses. If the customer checking out is using a different email address than the one the coupon was issued to โ or if they’re not logged in and their email doesn’t match โ the coupon will fail. This also catches customers who have multiple email addresses and are using one that isn’t in the coupon’s allowed list.
Where to check
Open the coupon, go to Usage Restriction, and look at the “Allowed emails” field. If there are email addresses listed there, the coupon will only work for customers whose billing email matches one of those addresses. WooCommerce checks against the billing email entered at checkout, not the account email on file โ so a customer who fills in a different address than the one their account uses will be blocked.
How to fix it
If the email restriction is intentional (a loyalty reward or a targeted offer), add the correct email address to the list. If the customer is using a different email than the one they were sent the offer on, they need to enter the matching email at checkout. If you want to remove the restriction entirely, clear the field. Be aware that clearing email restrictions on a code that was distributed privately makes it effectively a public coupon โ anyone with the code can use it.
9. “Individual use only” is blocking another active coupon or discount
WooCommerce coupons have an “Individual use only” checkbox that prevents other coupons from being applied in the same cart. If a customer has already applied one coupon and tries to add a second, the second may be blocked if either coupon has this setting enabled. This is coupon-on-coupon blocking โ it doesn’t prevent campaign-level discounts from combining with the coupon.
Less obviously: if coupon A is marked “Individual use only” and a customer tries to apply coupon B afterward, WooCommerce may block coupon B. But if a customer applies coupon B first and then tries coupon A (the individual-use one), coupon A will remove B and apply itself. The order of entry matters.
Where to check
Open the coupon, go to the General tab, and check the “Individual use only” checkbox. Also check whether there are any other active coupons in the customer’s cart โ you’ll be able to see these in the order detail if you check a test checkout or a recent failed order.
How to fix it
If coupons should stack, uncheck “Individual use only.” If you want to allow one specific combination of coupons despite having individual use enabled, WooCommerce does have an “Individual use only” exception field โ you can list coupon codes that are allowed to combine with this one. That’s a nuanced workaround, but it exists. For more context on how stacking and coupon interactions work in practice, the guide on WooCommerce discount stacking covers the mechanics in detail.
10. Free shipping coupon isn’t connected to a shipping zone
If a coupon is set up to grant free shipping but the free shipping option never appears at checkout, the most common reason is a missing configuration in your shipping zones. A WooCommerce “free shipping” coupon type doesn’t override all shipping methods โ it enables the “Free shipping” method in WooCommerce’s shipping settings, but only if that method exists and is enabled in the relevant shipping zone for the customer’s address.
Where to check
Go to WooCommerce → Settings → Shipping → Shipping zones. Open the zone that covers the customer’s shipping address and look at the shipping methods listed. There needs to be a “Free shipping” method present and set to “A valid free shipping coupon” (or the combined option that allows both coupons and minimum spend). If the zone only has Flat rate and Local pickup, a free shipping coupon will do nothing at checkout.
How to fix it
Add a “Free shipping” method to the appropriate shipping zone(s). Edit the method and set its “Requires” field to “A valid free shipping coupon.” Once that method is present and enabled in the correct zone, the coupon will surface it as a shipping option when customers apply a valid free shipping code.
Also check the “Allow free shipping” box on the coupon itself
On the coupon’s General tab, there’s a checkbox labeled “Allow free shipping.” This must be checked for the coupon to activate the free shipping method. It’s easy to overlook when building a coupon that’s primarily a percentage or fixed-amount discount with free shipping added as a bonus.
11. Coupons are disabled at the store level
WooCommerce has a global setting that disables the coupon system entirely. If this is turned off, the coupon code field won’t appear at checkout and no coupons will work at all โ regardless of how they’re configured. This is occasionally disabled intentionally by store owners who don’t use coupons, but it can also be toggled off by a plugin, a theme setting, or during a site migration without anyone noticing.
Where to check
Go to WooCommerce → Settings → General. Look for the “Enable coupons” checkbox (in recent WooCommerce versions this may be labeled “Enable the use of coupon codes”). If it’s unchecked, no coupon will work anywhere in the store.
How to fix it
Check the box and save. The coupon input field will reappear at checkout immediately. If you’re unsure why it was disabled, check your site’s activity log (Jetpack or WP Activity Log both track settings changes) to see if a recent plugin update or theme change touched this setting.
12. A plugin conflict is overriding or blocking the discount
A WooCommerce coupon that appears correctly configured but still fails at checkout โ after you’ve ruled out all the reasons above โ is usually the result of a plugin conflict. Dynamic pricing plugins, discount campaign plugins, checkout customization plugins, and some page builder integrations can all interfere with WooCommerce’s coupon processing in ways that aren’t immediately obvious.
The most common mechanism is a plugin that hooks into WooCommerce’s price calculation or cart validation and either overrides the final price (making the coupon’s discount disappear into the calculation), or fails to pass through the coupon validation correctly.
How to diagnose
-
Test in a clean environment
Create a staging copy of your site. Deactivate all plugins except WooCommerce and your theme. Try applying the coupon. If it works, a plugin is the cause. Reactivate plugins one at a time until the coupon breaks โ the last one you reactivated is the conflict.
-
Check your discount campaign plugin’s settings
If you use a campaign discount plugin alongside native coupons, check whether it has a setting that controls coupon compatibility. Some plugins have priority rules or stacking controls that affect whether WooCommerce coupons apply on top of campaign prices. The plugin’s documentation should explain how its discounts interact with native coupons.
-
Test with the default WooCommerce theme (Storefront or Twenty Twenty-Four)
Occasionally a theme’s checkout customization interferes with coupon field processing. Switching to a default theme for a test checkout can rule this out.
-
Check for block checkout compatibility issues
If your site uses WooCommerce’s block-based cart and checkout, some older discount plugins may not apply correctly โ they were built for the legacy shortcode checkout and may not hook into the block checkout’s price pipeline. This is a known compatibility issue. See the guide on discount plugins and block checkout for the architectural explanation.
A note on Smart Cycle Discounts and native coupons
If you’re using Smart Cycle Discounts to run campaign-based promotions, it’s worth knowing that campaign codes generated within Smart Cycle Discounts are separate from native WooCommerce coupons โ they go through the campaign system’s own validation, not WooCommerce’s coupon engine. If a Smart Cycle Discounts campaign code isn’t working, the starting point is the campaign settings within the plugin, not WooCommerce’s Coupons screen. For the interaction between Smart Cycle Discounts campaigns and native WooCommerce coupons, the coupons vs. campaign discounts guide covers how the two systems coexist.
Quick-reference diagnostic table
Use this table as a starting point when a coupon fails. Each row maps the symptom to the most likely cause and where to check it in the WooCommerce admin.
| Symptom | Most likely cause | Where to check |
|---|---|---|
| “Coupon has expired” | Expiry date passed, or timezone mismatch | Coupon → Usage Restriction → Expiry date; Settings → General → Timezone |
| “Coupon usage limit has been reached” | Total or per-user usage cap hit | Coupon → Usage Limits → Usage count vs. limit |
| “The minimum spend for this coupon is $X” | Cart subtotal below the threshold | Coupon → Usage Restriction → Minimum spend |
| Coupon rejected on high-value cart | Maximum spend field is set | Coupon → Usage Restriction → Maximum spend |
| “Coupon is not applicable to your cart” | Product restriction: no qualifying items in cart | Coupon → Usage Restriction → Products / Product categories |
| Discount applies to some items but not others | Excluded products or categories in cart | Coupon → Usage Restriction → Exclude products / Exclude categories |
| Coupon fails only when items are on sale | “Exclude sale items” is checked | Coupon → Usage Restriction → Exclude sale items checkbox |
| Fails for some customers, works for others | Email address restriction | Coupon → Usage Restriction → Allowed emails |
| Second coupon won’t apply | “Individual use only” enabled on one coupon | Coupon → General → Individual use only |
| Free shipping never appears at checkout | Free shipping method missing from zone | Settings → Shipping → Shipping zones → add Free shipping method |
| No coupon field visible at checkout | Coupons disabled globally | Settings → General → Enable coupons checkbox |
| Coupon valid but discount disappears or is zero | Plugin conflict overriding price calculation | Deactivate plugins one by one on a staging copy |
Frequently asked questions
Why does WooCommerce say “coupon is not valid” without a specific reason?
WooCommerce intentionally uses vague coupon error messages to prevent customers from learning exactly which restriction is in place โ for example, it won’t say “this coupon is restricted to email addresses on our loyalty list” because that reveals more than you might want to share. The message “coupon is not valid” typically covers expiry, usage limits, and product restrictions. “Coupon is not applicable to your cart contents” usually means a product-level restriction, category exclusion, sale-item exclusion, or a minimum/maximum spend mismatch. Work through each possibility using the diagnostic table above.
Why does a WooCommerce coupon work for some customers but not others?
The most common reasons are email address restrictions (the coupon is tied to specific email addresses), per-user usage limits (the customer has already hit their individual redemption cap), or cart contents differences (the customer’s cart contains excluded products or sale items that other customers’ carts don’t). If the failure pattern is truly random, a plugin conflict is worth investigating โ some caching or session plugins can interfere with coupon validation inconsistently.
Can a WooCommerce coupon code be applied automatically without the customer entering it?
Not natively. WooCommerce coupons require manual entry at checkout. Some plugins and custom code can auto-apply a coupon via a URL parameter (for example, adding ?coupon_code=SAVE20 to a link), but this isn’t built into WooCommerce core. If you want discounts that apply automatically without any customer action, a campaign-based discount approach is better suited โ it applies the discounted price before the cart is assembled, requiring no code entry at all.
Does WooCommerce’s “Exclude sale items” setting affect products discounted by a campaign plugin?
Yes, if the campaign plugin applies its discounts via WooCommerce’s native sale price field. If a plugin sets a sale price on a product (the same field you’d fill in manually on the product edit screen), WooCommerce treats that product as a “sale item” for the purposes of the “Exclude sale items” coupon setting. The coupon will be blocked for those products. If the campaign plugin applies discounts in a different way โ for example, via cart-level price filters rather than the sale price field โ the behavior may differ. Check your plugin’s documentation to understand which pricing method it uses.
What’s the difference between “Fixed cart discount” and “Fixed product discount” coupon types in WooCommerce?
“Fixed cart discount” reduces the entire cart total by a set dollar amount โ the $10 comes off the whole cart. “Fixed product discount” reduces the price of specific products by the set amount at the line-item level. If a coupon uses “Fixed product discount” and the restricted product isn’t in the cart, the coupon will not apply at all. If there are multiple qualifying items, the discount applies to each one (up to the “Limit usage to X items” setting if that field is configured).
How do I test whether a coupon is working without placing a real order?
Use WooCommerce’s built-in test mode (available with some payment gateways like Stripe) or place a test order with a “Cheque” payment method โ it doesn’t process a real payment. Add the products you want to test to a cart, apply the coupon, and check the cart totals before reaching the payment step. You can cancel or delete the test order from the WooCommerce admin afterward without any financial impact. A staging environment is even better for this โ you can test freely without creating real order records.
Is there a log in WooCommerce that shows why a coupon failed?
Not by default. WooCommerce does not write coupon validation failures to a log. However, if WooCommerce logging is enabled (go to WooCommerce → Status → Logs), some events are captured. For detailed coupon failure logging, you’d need a plugin specifically designed to audit coupon usage โ there are a few available in the WordPress plugin repository. For most troubleshooting purposes, working through the diagnostic table above is faster than reading raw logs.
The vast majority of WooCommerce coupon failures come down to one of the twelve reasons above. A coupon that was working and then stopped is almost always a usage limit, an expiry, or a change in the cart contents that no longer qualifies. A coupon that was never working is usually a configuration issue โ product restrictions, the exclude sale items setting, or the free shipping zone setup.
If you’ve worked through this list and the coupon still won’t apply, the last resort is a clean plugin-deactivation test on staging. Plugin conflicts are the one cause that can’t be diagnosed by looking at the coupon settings alone โ they require isolating the environment.
What to take from this
- WooCommerce coupon errors are almost always caused by one specific setting โ the challenge is knowing which one to look at first.
- The “Exclude sale items” checkbox is the most common silent killer: if any product in the cart has a sale price, the coupon fails for that item โ including prices set by campaign plugins.
- The “Allowed emails” restriction and per-user usage limits explain why a coupon works for some customers but not others.
- Free shipping coupons require a “Free shipping” method to be present and enabled in the correct shipping zone โ the coupon alone is not enough.
- If the coupon settings look right but it still fails, a plugin conflict is the next thing to test โ deactivate plugins on staging until the coupon works, then reactivate one at a time to find the conflict.
- WooCommerce’s “Coupon is not valid” message is deliberately vague. Use the diagnostic table in this post to systematically check each possible cause rather than guessing.