Picture a small WooCommerce shop on Black Friday morning. The sale went live at midnight. Everything is 30% off, set as sale prices on the products. There’s a BLACKFRIDAY code for an extra 20% off, sent to the mailing list. There’s a 50% code from last year’s launch that nobody remembered to switch off. And there’s a 30% friends-and-family code that got shared a bit wider than planned.
Someone finds the old codes on a voucher site and adds all three. The basket total drops to nothing, a free shipping rule kicks in, and the order goes through at £0. By breakfast there are a dozen of them.
That’s a made-up shop, but it’s a pattern I’d check for on any WooCommerce store before a big sale. None of those discounts is wrong on its own. The problem is what they do together. So here’s how coupons stack in WooCommerce, the settings that stop it, and how I’d test it before Black Friday.
How a basket gets to zero
WooCommerce coupon stacking happens in a few quiet ways, and they add up.
- Coupons apply on top of sale prices. A percentage coupon takes its percentage off the price the customer is paying, and in a sale that’s already the sale price. Unless you tell it not to, the code stacks on the sale.
- More than one coupon can go in the basket. Unless a code is set to individual use, a customer can add a second and a third.
- By default, each coupon works from the same starting price. There’s a setting in WooCommerce > Settings > General called Calculate coupon discounts sequentially, and it’s off by default. With it off, each coupon is worked out on the current price rather than on what’s left after the last one. Two codes worth 50% and 20% don’t make 60% off. They make 70%. Add a third and you can reach the full price of the item. WooCommerce won’t discount an item below zero, but zero is bad enough.
- Shipping is separate. Coupons only discount the items in the basket, so a zero basket usually still pays postage. Unless one of the codes allows free shipping, or your free shipping rule is based on the order value before coupons. Then the whole order can be free.
- A free order doesn’t need paying for. When the total is zero, WooCommerce lets the customer place the order without a card. There’s no payment step to stop it.
The coupon settings that stop it
All of these live on the coupon itself, under Marketing > Coupons, in the Usage restriction and Usage limits tabs.
- Individual use only. Tick this and the coupon can’t be used with other coupons. I’d tick it on every code that’s live during the sale, not just the Black Friday one. It’s the old codes you’ve forgotten about that cause the trouble.
- Exclude sale items. Tick this if your sale prices are the offer and the code shouldn’t come off them as well. One thing to know: a fixed cart discount can still apply if the basket also has items that aren’t on sale.
- Minimum spend. Useful for “extra off when you spend more” offers. It checks the basket subtotal before the coupon goes on, so it doesn’t stop discounts piling up by itself. Treat it as a qualifier, not a safety net.
- Usage limit per coupon and per user. A Black Friday code that can be used a set number of times, or once per customer, can’t run away from you. If a code does get out, the damage has a ceiling. I wrote more about free shipping coupons and minimum spend coupons if you want the step by step.
- Expiry date. Give every code an end date, including the Black Friday one. A code with no end date is a code that’s still live next year.
Check the free shipping rule as well
If you offer free shipping over a certain spend, open the Free Shipping method in your shipping zone. When you pick a minimum order amount, there’s a box called Apply minimum order rule before coupon discount.
If that box is ticked, WooCommerce checks the order value before the coupons come off. So a basket that’s been discounted to nothing can still qualify for free shipping. That might be what you want on a normal week. During a sale with stacked codes, it’s how a free basket becomes a free order.
Coupon plugins that stack on their own
Plenty of shops run more than plain WooCommerce coupons by Black Friday. Loyalty points, store credit, gift cards, “buy one get one” rules, automatic discounts that apply without a code.
Depending on how each plugin works, some of these aren’t coupons at all. Some add discounts that Individual use only doesn’t see. Some apply a code for the customer. So ticking the box on your Black Friday coupon doesn’t always mean nothing else can stack on top of it.
I wouldn’t assume. Check each plugin’s settings for how it combines with other discounts, then test it.
How I’d test coupon rules before a sale
This is the bit that matters most. Settings tell you what should happen. A test basket tells you what does.
- List every live coupon. Go to Marketing > Coupons and look at all of them, not just the new ones. Anything that isn’t part of this sale gets an expiry date or goes in the bin.
- Set up the sale on a staging copy. Same sale prices, same codes, same plugins. If you’ve never used your staging site, this one’s for you.
- Try to break it. In a private browser window, as a guest, add a sale item and try the Black Friday code with each of the other codes. Try it with your loyalty or store credit plugin. Try the biggest basket and the smallest.
- Look at the order total, not just the basket. Go all the way to checkout so you can see shipping and the final figure.
- Place a test order. Use your payment gateway’s test mode and check what lands in WooCommerce > Orders.
- Watch the first hour. When the sale goes live, keep an eye on new orders. A run of low or zero totals is your early warning.
If you’re already planning a feature freeze before Black Friday, do the coupon test before the freeze starts. Then nobody’s changing codes in the busy week.
Wrap Up
Black Friday codes rarely go wrong on their own. They go wrong when they meet a sale price, an old code and a generous free shipping rule. Tick Individual use only on every live code, decide whether codes should come off sale items, give everything a limit and an end date, check the free shipping box, and then try to break it before your customers do.
If you’d like a second pair of eyes on your coupon rules before the sale, or you need a discount setup that WooCommerce can’t do out of the box, book a quick call and we’ll go through it.
Written by Connie, an AI, from Neil Matthews’ notes, archive, and direction. Neil directed and edited this piece. He did not write these words. Augmented publishing by Neil Matthews.