How to Fix WooCommerce Coupon Codes Not Working

A WooCommerce coupon can look correct in the dashboard and still fail when a customer applies it. The usual cause is not the code itself, but a mismatch between the coupon rules and the cart: an expired date, an unmet spending threshold, an excluded category, or a usage limit that has already been reached.

Start with a controlled test instead of changing several settings at once. The steps below cover coupon restrictions, dates, usage limits, product categories, taxes, caching, themes, plugins, and custom code.

Begin with a simple test coupon

Create a temporary coupon at Marketing > Coupons using deliberately simple settings:

  • Use a short code such as TEST10.
  • Choose a fixed-cart or percentage discount.
  • Leave minimum and maximum spend blank.
  • Do not select products, categories, or exclusions.
  • Leave usage limits and customer email restrictions blank.

Test the coupon in a private browser window with a published product that has a standard price. If it works, the original coupon probably has a restrictive setting. If it fails too, look beyond the coupon itself and investigate the cart, checkout, cache, theme, or plugin environment.

Review the coupon restriction settings

Minimum and maximum spend

Open the coupon’s Usage restriction tab and compare its minimum or maximum spend with the eligible cart subtotal. The subtotal is not always the same as the order total: shipping, taxes, and other discounts may be calculated separately.

For example, a coupon requiring a $100 subtotal may fail if another discount reduces the eligible product total below $100. Test with a predictable cart containing only full-price products before changing the coupon.

Individual use and coupon combinations

When Individual use only is enabled, WooCommerce may reject the coupon if another coupon is already in the cart. Remove all other coupons and try again.

Do not assume that two valid coupons can be combined. If your promotion depends on stacking discounts, check each coupon’s individual-use setting and any custom rules that control coupon combinations.

Products and categories

Check the Products, Exclude products, Product categories, and Exclude categories fields. A coupon may be limited to one category while the customer is testing with a similar-looking product from another category.

Test with a product you know is included and not excluded. Variable products can require extra care because the parent product, variation, and assigned categories may not correspond to the selections made in the coupon settings.

Check expiration dates and usage limits

Inspect the Coupon expiry date and confirm the WordPress timezone under Settings > General. Date boundaries can produce confusing results when the store’s timezone differs from the customer’s local time.

Then review these usage settings:

  • Usage limit per coupon: The total number of times the coupon can be used.
  • Usage limit per user: The number of uses allowed for one customer or account.
  • Limit usage to X items: The number of eligible items that can receive the discount.

Check the coupon’s current usage count and test both while logged in and logged out. Guest and registered customers may be identified differently depending on the store’s checkout configuration and extensions.

Check sale items, tax, and free-shipping rules

The Exclude sale items option prevents a coupon from applying to discounted products. If it is enabled, test with a full-price product.

For a free-shipping coupon, confirm that a free-shipping method is available in the customer’s shipping zone. The coupon cannot create a shipping method that the zone or product setup does not provide. For related troubleshooting, see how to fix WooCommerce shipping not showing at checkout.

Tax display and calculation settings can also make a minimum-spend rule appear inconsistent. Compare the coupon requirement with the store’s tax configuration and repeat the test using a product with a clear, predictable price.

Clear caches and refresh the cart

WooCommerce coupon validation depends on the current cart session. A cached cart or checkout response can show an old total or an outdated coupon message.

Clear the browser cache, page-cache plugin, server cache, and CDN cache. Then test in a private window. Cart, checkout, and account pages should be excluded from full-page caching, and requests containing changing cart data should not be cached. If the site uses object caching, purge it according to the cache plugin or hosting provider’s instructions.

You can also remove the coupon, update the cart, and apply it again. This refreshes the cart state and helps distinguish an outdated notice from a genuine validation failure.

Test for plugin and theme conflicts

Membership, subscription, bundle, dynamic-pricing, checkout-editor, and payment plugins can change how coupons are validated or how cart totals are calculated. A conflict is especially likely when a coupon works with a simple product but fails with a subscription, bundle, variation, or membership product.

Use a staging site if possible. Temporarily switch to a default WooCommerce-compatible theme and deactivate nonessential plugins. Test after each change instead of disabling everything and changing several variables at once. Keep WooCommerce and its extensions updated, but back up the site and check compatibility before updating a production store.

Review WooCommerce system status and enable logging only for as long as necessary. Never expose debug output or customer information on a live site. If the issue involves PHP errors or custom checkout code, a WordPress backend developer can trace the failure more efficiently than repeatedly changing coupon settings.

Inspect custom coupon code and hooks

Custom snippets may intentionally reject coupons or alter cart totals. Search the active theme’s functions.php, custom plugins, and code-snippet plugins for coupon-related logic and hooks such as woocommerce_coupon_is_valid, woocommerce_coupon_error, and cart-total filters.

Do not delete a snippet without understanding its purpose. It may enforce a business rule based on user role, product type, shipping country, cart contents, or payment method. Test changes on staging and compare the behavior with the custom code enabled and disabled.

add_filter( 'woocommerce_coupon_is_valid', function ( $valid, $coupon ) {
    // Add logging or a temporary condition only on a staging site.
    return $valid;
}, 10, 2 );

This example does not repair a coupon by itself. It illustrates the validation hook a developer might inspect. Avoid logging coupon codes, customer data, or payment details on a public production site.

When to hire a WooCommerce developer

Consider hiring a WooCommerce developer when a coupon works in a clean test but fails in the real checkout, when it interacts with subscriptions or bundles, or when custom pricing code is involved. A developer can reproduce the issue on staging, inspect notices and logs, test plugin combinations, and make a focused change without weakening every coupon rule.

Frequently asked questions

Why does WooCommerce say a coupon is invalid?

The code may be expired, mistyped, below its minimum spend, restricted by product or category, already at its usage limit, blocked by another coupon, or rejected by custom validation code.

Why does a coupon work in the cart but not at checkout?

Checkout can recalculate shipping, taxes, customer eligibility, and other rules. Caching or checkout customization plugins may also cause the cart and checkout to display different results.

Can caching stop WooCommerce coupons from working?

Yes. Cached cart or checkout responses can display stale totals or validation messages. Exclude dynamic WooCommerce pages from page caching, purge the relevant caches, and retest in a private window.

Should I disable every plugin to find the conflict?

Use a staging site when possible. Deactivate nonessential plugins temporarily and reactivate them one at a time. This identifies the conflict while limiting risk to the live store.

Conclusion

Fix WooCommerce coupon codes methodically: test a simple coupon, review restrictions and dates, check usage limits and product categories, clear caches, and isolate theme or plugin conflicts. When advanced product types or custom PHP are involved, professional debugging can identify the validation problem while preserving the promotion rules your store needs.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top