A coupon code does something a sitewide sale can’t: it targets. A 20% off banner across your entire store discounts everyone, including people who were about to buy at full price anyway. A coupon reaches a specific person, at a specific moment, for a specific reason – an abandoned cart, a first-time visitor, a loyal customer worth rewarding. If you’re running WooCommerce, that targeting capability is already built into the platform. Most stores just aren’t using more than a fraction of it.
Getting WooCommerce ready first
If WooCommerce isn’t installed yet, that’s step zero. Log into your WordPress dashboard, go to Plugins > Add New, search for WooCommerce, click Install Now, then Activate. Activation triggers a setup wizard walking through currency, payment gateways, and shipping – the basics every store needs configured before coupons are worth setting up at all. Once that’s done, coupon functionality is already sitting there natively, no additional plugin required for the core feature.
Building your first coupon
From the dashboard, go to WooCommerce > Coupons and click Add Coupon. The screen that opens has three tabs worth understanding individually, since most coupon mistakes trace back to skipping one of them entirely.
Coupon code and description
The code is what customers actually type at checkout – something memorable like SAVE10 or WELCOME15 works better than a random string, since customers need to recall it accurately. WooCommerce can generate a random code automatically if you don’t care about memorability, useful for codes distributed directly via email or SMS rather than something a customer needs to remember on their own. The description field is internal only – customers never see it – so use it to note the coupon’s purpose for your own future reference, especially once you’re running more than a handful of active codes at once.
General coupon data
This tab defines what the discount actually does. Three discount types cover most situations: percentage discount takes a cut off the total order, fixed cart discount removes a flat dollar amount from the entire cart, and fixed product discount knocks a flat amount off specific products rather than the order as a whole. Pick the type that matches your actual goal – percentage discounts scale with order size and suit sitewide promotions, while fixed discounts work better for driving traffic toward a specific product or hitting a specific minimum spend threshold.
The coupon amount field takes either the percentage or the dollar figure depending on which type you picked above. There’s also a checkbox to bundle free shipping into the same coupon, and an expiry date field if the offer shouldn’t run indefinitely – which, for almost any promotional coupon, it shouldn’t.
Usage restrictions
This is the tab that turns a blunt discount into a precisely targeted one, and it’s the one most store owners underuse. Minimum and maximum spend requirements let you tie the discount to order size – a coupon requiring a $50 minimum spend, for instance, nudges customers toward adding one more item rather than just applying the discount to a $12 order and leaving.
Individual Use Only prevents stacking a coupon on top of other active discounts, which matters if you’re running more than one promotion simultaneously and don’t want customers combining them into a bigger discount than intended. Exclude Sale Items keeps the coupon from applying to products already discounted, protecting margin on items that are already priced down.
Product and category restrictions let you scope a coupon to exactly the items you want to move, and the exclusion versions of those same fields let you protect specific products or categories from ever being discounted at all. Allowed email addresses restricts a coupon to a specific list of customers or domains entirely, which is the mechanism behind any “exclusive offer for our email subscribers” campaign.
Usage limits
Two settings here control volume. Usage limit per coupon caps the total number of times that code can be redeemed store-wide, useful for a limited-quantity flash promotion. Usage limit per user caps how many times a single customer can use it, which stops one customer from applying a “new customer welcome” code to five separate orders.
Once every tab is configured the way you want, click Publish and the coupon goes live immediately. There’s no separate activation step and no delay – the moment the coupon is published, a customer who has the code can enter it at checkout and it works.
What the customer actually experiences
At checkout, a Coupon Code field sits waiting for input. The customer types the code, clicks Apply Coupon, and the discount recalculates the order total instantly, with the discount line itemized separately from the product costs so the customer can see exactly what they saved. If a restriction blocks the coupon – order total too low, product excluded, usage limit hit – WooCommerce shows an error explaining why rather than silently failing, which matters for customer trust. A coupon that just doesn’t work with no explanation reads as a broken store, not a legitimate restriction.
Strategies beyond a flat percentage off
Targeting specific products
A slow-moving product sitting in inventory can get its own dedicated coupon – a $10 discount that only applies to that one item, using the product restriction field from the usage restrictions tab. This moves stuck inventory without discounting anything else in the store.
Targeting entire categories
The same restriction mechanism scoped to a category instead of a single product lets you run seasonal promotions – 20% off an entire clothing category during an end-of-season clearance, for instance – without touching pricing on anything outside that category.
Buy-one-get-one and bundled offers
WooCommerce’s built-in coupon system doesn’t natively support true BOGO logic or complex bundling on its own. A plugin like WooCommerce Advanced Coupons extends the core coupon engine to handle that kind of offer, along with more complex bundle and tiered-discount logic that goes beyond what the default coupon screen exposes.
Recovering abandoned carts
A customer who adds items to their cart and leaves without checking out is one of the highest-intent audiences you can market to – they were close enough to buying that they took the first step. Sending a targeted coupon code through email marketing to exactly that group, referencing the specific items left behind, converts a meaningful share of otherwise lost sales back into completed orders.
Managing coupons after they’re live
Editing an existing coupon is as simple as opening WooCommerce > Coupons, clicking the coupon’s name, adjusting whatever needs to change, and clicking Update. Nothing about the setup process is one-way or locked in once published.
Tracking performance happens through WooCommerce > Reports > Coupons, which shows usage counts and total discount value across your active and past codes. This is worth checking regularly rather than only at the end of a campaign – a coupon that isn’t getting used at all after a week is a signal to either promote it harder or reconsider whether the offer is actually compelling.
Disabling a coupon without deleting it just means switching its status to Draft from the coupon editor, which is useful if you want to pause a promotion temporarily without losing the configuration. Permanent removal happens by trashing the coupon from the coupons list, which makes sense once a code is genuinely retired and won’t be reused.
Getting the strategy right, not just the mechanics
Coupons work best used deliberately rather than constantly. Running a sitewide discount every week trains your audience to wait for the next one instead of buying at full price, which erodes margin over time in a way that’s hard to reverse once customers get used to it. Reserve broad discounts for genuine sales events and lean on targeted, restricted coupons the rest of the time.
Visibility matters as much as the discount itself. A coupon nobody knows about doesn’t move any sales regardless of how generous it is. Promote active codes through email, social channels, or an on-site banner, and make sure the code itself is easy enough to remember that a customer doesn’t need to copy-paste it from somewhere.
Urgency closes the loop. An expiry date or a capped usage limit gives a customer a reason to act now instead of bookmarking the offer and forgetting about it. Even a modest, reasonable deadline changes behavior more than an open-ended discount that never seems to run out.
A worked example: building a first-order welcome coupon
Say the goal is a coupon that welcomes new email subscribers with 15% off their first order, without letting anyone abuse it repeatedly. Walking through the tabs with that specific goal in mind makes the configuration decisions concrete rather than abstract.
Code and description: something like WELCOME15, with a description noting “email signup welcome offer” for your own records. General data: percentage discount, amount set to 15. No free shipping bundled in, since that’s a separate cost decision worth making independently. An expiry date thirty days out keeps the offer feeling current rather than permanently available to anyone who stumbles across the code later.
Usage restrictions is where the actual targeting happens. No minimum spend required, since the point is removing friction for a first purchase, not adding a hurdle. Individual Use Only enabled, so it can’t stack with other active promotions and eat further into margin. No product or category restrictions, since a genuine welcome offer should feel unconditional rather than narrowly scoped.
Usage limits: per-coupon limit left open since new subscribers keep arriving continuously, but per-user limit set to one, so the same customer can’t apply a “welcome” discount to every order they place going forward. That single setting is what actually keeps a welcome offer functioning as a welcome offer instead of turning into a permanent 15% discount for anyone who figures out the code never expires for them personally.
That’s the entire coupon, built from the same three tabs every coupon uses, just with settings chosen deliberately around one specific goal rather than left at default values.
Troubleshooting coupons that aren’t behaving as expected
Coupon shows as invalid at checkout even though it should apply. Check the usage restrictions tab first – a minimum spend requirement, a product restriction, or an excluded sale item are the most common reasons a technically-active coupon refuses to apply to a specific cart. The error message WooCommerce shows the customer usually names the exact restriction that’s blocking it, so read that message rather than guessing.
Coupon applies but the discount amount looks wrong. Confirm the discount type actually matches what was intended – a fixed cart discount and a fixed product discount produce very different results on a multi-item order, and it’s an easy field to misconfigure if you’re moving quickly through the setup screen.
A previously working coupon suddenly stops applying. Check the expiry date first, since a coupon quietly passing its expiration is the single most common reason a code that worked last week doesn’t work today. Usage limits are the second most common culprit – a per-coupon cap that’s been quietly reached over time will start rejecting the code with no visible warning that the limit was ever close.
Customers report the coupon field is missing entirely at checkout. This is rarely a coupon configuration issue and usually points to a theme or checkout customization that accidentally hid the coupon input field, or a caching layer serving an outdated version of the checkout page. Clear any relevant cache and check the checkout page in an incognito window before assuming the coupon system itself is broken.
Common mistakes worth avoiding
Publishing a coupon with no expiry date and no usage limit, then forgetting it exists. Months later it’s still live, still discounting orders, and nobody remembers to check whether it’s still supposed to be active. Set an end date on every promotional coupon as a default habit, not an afterthought.
Stacking too many restrictions until the coupon becomes nearly unusable. A code requiring a $200 minimum spend, excluding sale items, restricted to one category, and capped at one use per customer might technically work as intended, but if the restrictions compound to the point where almost nobody actually qualifies, the coupon isn’t accomplishing anything either.
Testing a coupon only from the admin side. Actually check out as a customer using the live code before promoting it widely. Restriction logic occasionally interacts in ways that aren’t obvious from the settings screen alone, and catching a broken coupon before a customer does saves both a support ticket and some embarrassment.
Frequently asked questions
Can a customer apply more than one coupon to the same order?
Yes, unless a specific coupon has Individual Use Only enabled. Without that restriction active, WooCommerce allows multiple valid coupons to stack on a single order, which can add up to a bigger discount than any single code was meant to provide on its own – a reason to enable that restriction on any coupon you don’t want combined with others.
Do coupons apply automatically or does the customer always have to enter a code?
The core coupon system requires the customer to enter a code manually at checkout. Automatic, no-code discounts applied based on cart conditions typically require additional plugin functionality beyond what the default coupon screen provides.
What happens to an order if a coupon is deleted after it’s already been used?
Orders that already used the coupon retain their applied discount, since the discount was calculated and recorded at the time of purchase. Deleting the coupon afterward only prevents future use of that code; it doesn’t retroactively change completed orders.
Is there a limit to how many coupons a store can have active at once?
No hard limit exists on the number of coupons a WooCommerce store can run simultaneously. The practical limit is more about your own ability to track and manage them – a store running dozens of overlapping active codes tends to lose track of which ones are still relevant without a disciplined naming and review process.
Can I create a coupon that only works during specific hours or days, like a flash sale?
The built-in coupon system controls a start and end date but doesn’t natively schedule around specific times of day or day-of-week windows within that range. A true hour-by-hour flash sale typically needs an extension plugin or manual activation and deactivation timed to the promotion window.
A coupon strategy that actually moves revenue looks less like a permanent discount button and more like a set of small, deliberate levers – pulled for specific customers, specific products, specific moments – rather than one blunt lever left on all the time.
Start with one well-targeted coupon rather than five loosely configured ones. A single welcome offer, properly restricted and properly tracked, teaches you more about what your customers actually respond to than a scattered handful of half-considered promo codes ever will.

