How to Create WooCommerce Coupons: Discount Codes, Rules, and Testing (2026)

A coupon that takes ten seconds to create can take an entire Friday evening to untangle if it discounts the wrong dishes. The code itself is easy. The real work is deciding what qualifies, protecting your margin, and checking what customers actually pay. WooCommerce’s built-in coupon tools cover straightforward promotions well. This walkthrough uses a...

September 15, 2026 WPSlash

A coupon that takes ten seconds to create can take an entire Friday evening to untangle if it discounts the wrong dishes. The code itself is easy. The real work is deciding what qualifies, protecting your margin, and checking what customers actually pay.

WooCommerce’s built-in coupon tools cover straightforward promotions well. This walkthrough uses a restaurant offer throughout: TAKEAWAY10, giving 10% off eligible takeaway dishes when the cart meets a $30 minimum spend. The dollar amounts are examples; the same setup works in your store’s configured currency.

How WooCommerce Coupons Work and Where to Enable Them

A native WooCommerce coupon is a code a customer applies to their cart or checkout. WooCommerce checks its restrictions, calculates the eligible discount, and records the coupon against the resulting order.

Out of the box, you can create percentage, fixed-cart, and fixed-product discounts. You can also set spending thresholds, restrict products or categories, exclude sale items, limit redemptions, and allow free shipping when the shipping configuration supports it.

That covers plenty of useful offers. It doesn’t provide a complete promotion engine: automatic application, recurring ordering windows, reliable first-order eligibility, and pickup-only redemption generally need additional functionality.

Enable coupons and find the editor

  1. In WordPress, open WooCommerce → Settings → General.
  2. Find the coupon setting and check “Enable the use of coupon codes.”
  3. Save your changes.
  4. Open Marketing → Coupons, then select “Add coupon.”

These are the standard locations in current WooCommerce installations, although extensions and customized administration menus can change what you see.

For our restaurant example, first create a product category called “Takeaway Offer” and assign the eligible dishes to it. This makes the promotion easier to maintain than a long list of individual products.

Here’s the distinction that matters: a category called “Takeaway Offer” doesn’t prove the customer selected pickup. It identifies eligible products, not the fulfillment method. We’ll keep those two rules separate.

Create Your First Coupon and Choose the Right Discount Type

Enter TAKEAWAY10 in the coupon-code field. Keep codes short, readable, and easy to type on a phone. WooCommerce coupon codes aren’t case-sensitive, so capitalization is mainly a presentation choice.

Add an internal description such as “10% off Takeaway Offer category; $30 cart minimum; excludes sale items; no stacking.” Customers don’t normally see this description. It’s there so someone opening the coupon next month understands the intended rules.

Percentage, fixed-cart, or fixed-product?

Under the coupon’s General tab, choose the discount type. The difference is easiest to see with a few clean examples, before tax and delivery:

  • Percentage discount: 10% off $40 of eligible products gives a $4 discount. Enter 10, without a percent sign.
  • Fixed cart discount: A $5 coupon removes $5 across the eligible cart merchandise, not $5 from every item. WooCommerce allocates the discount across applicable lines.
  • Fixed product discount: A $2 coupon applied to three qualifying units normally removes $6, subject to item limits and the eligible items’ prices.

For TAKEAWAY10, choose “Percentage discount” and enter 10 as the coupon amount. Without further restrictions, a percentage coupon can reach more products than intended. Don’t publish it yet.

Fixed-product coupons are useful for offers such as “$2 off each selected pizza.” Fixed-cart coupons suit a straightforward basket incentive. Percentage discounts scale with the eligible purchase value, which also means their cost grows on larger orders.

Set the expiry date carefully

Choose the coupon expiry date and check the site timezone under Settings → General in WordPress. Use the restaurant’s intended local timezone, preferably a named city timezone when daylight-saving changes apply.

WooCommerce’s native expiry date normally makes the coupon expire at the beginning of the selected date, rather than after that date’s trading hours. For an offer advertised through Sunday night, Monday is therefore normally the expiry date to select. Test the boundary in your own installation, especially if another plugin changes scheduling.

Free shipping needs a shipping method too

The “Allow free shipping” checkbox doesn’t create a free-shipping service. You also need a Free shipping method in the customer’s matching shipping zone, configured to accept a valid free-shipping coupon or the relevant coupon-and-minimum requirement.

A restaurant delivery fee implemented as a separate checkout fee isn’t automatically removed by that checkbox. Keep it unchecked for this promotion unless free delivery is deliberately part of the offer.

[IMAGE: WooCommerce coupon General tab showing TAKEAWAY10 with Percentage discount selected, an amount of 10, the expiry-date field, and Allow free shipping left unchecked]

Set Spending Rules, Product Restrictions, and Sale Exclusions

The Usage restriction tab determines whether the offer behaves like the advertisement. This is where I’d spend more time than on choosing a clever coupon name.

Build the takeaway rules

  1. Set “Minimum spend” to 30.
  2. Leave “Maximum spend” blank unless the promotion genuinely has an upper cart-value limit.
  3. Check “Individual use only” to prevent normal stacking with other coupons.
  4. Check “Exclude sale items.”
  5. Select “Takeaway Offer” under Product categories.
  6. Add any specific exceptions under Exclude products, then review other category exclusions for conflicts.

A maximum spend is an eligibility ceiling, not a maximum discount. Setting it to $100 means an over-limit cart can’t use the coupon; it doesn’t mean “cap the savings at $100.” A maximum monetary discount for a percentage offer generally needs an extension or custom logic.

Understand what the minimum actually measures

WooCommerce’s native spending threshold uses the merchandise subtotal plus merchandise tax, before coupon deductions. Shipping doesn’t count toward that threshold. Tax settings therefore matter when checking the boundary.

More importantly, the minimum isn’t automatically restricted to products that receive the discount. Consider $24 of eligible dishes and $8 of excluded drinks, before tax. The $32 merchandise cart can meet the $30 minimum, while TAKEAWAY10 discounts only the $24 of eligible dishes.

That isn’t the same offer as “Spend $30 on selected dishes.” If you need an eligible-products-only minimum, use additional promotion logic and test it explicitly.

For a no-tax test cart, a $29.99 merchandise subtotal should fail and $30 should qualify. On a taxable store, test against the subtotal-plus-tax amount rather than assuming the displayed pre-tax subtotal is the comparison value.

Products, categories, and sale exclusions

For our percentage coupon, the Products and Product categories fields identify qualifying items. Exclusion fields remove items from eligibility. Start with one clear inclusion method; overlapping product selections and categories make the rules harder to audit.

With sale items excluded, a sale-priced dish shouldn’t receive this percentage discount, even if it belongs to the selected category. Fixed-cart coupons need special attention: native sale-item exclusion can prevent the entire fixed-cart coupon from applying when a sale item is present.

“Allowed emails” is useful for a targeted customer offer. Enter permitted billing email addresses, separated by commas. It checks the billing email used at checkout, not necessarily the address someone used to receive your newsletter.

Pickup and ordering hours are separate rules

Native coupon settings don’t directly offer “pickup only,” “delivery only,” or “Tuesday between 2 p.m. and 5 p.m.” Code names and product categories don’t enforce those conditions.

If you’re building the restaurant ordering workflow, FoodMaster’s WooCommerce restaurant ordering system supports delivery, pickup, and dine-in ordering, alongside POS, kitchen display, QR table ordering, and automatic printing. Those operational features belong alongside the promotion setup—not as a reason to assume native coupons gain fulfillment restrictions.

For a genuinely pickup-only offer, verify that your additional eligibility logic reads the actual selected fulfillment method and revalidates the coupon when that selection changes.

Limit Coupon Usage and Choose Where to Promote the Code

Usage limits control exposure. They don’t fix unclear eligibility, but they can stop a small campaign from becoming an unexpectedly expensive one.

Under Usage limits, “Usage limit per coupon” caps total redemptions. A value of 100 means up to 100 uses, not $100 in savings and not necessarily 100 different customers.

“Usage limit per user” limits repeat redemption against WooCommerce’s customer identification. Depending on checkout context, that involves the customer account or billing email. Set it to 1 for a one-use-per-customer promotion, but don’t describe it as reliable first-order verification.

A long-standing customer who hasn’t used the code may still qualify. Guest checkout and alternate email addresses also make identity-based restrictions less certain. Genuine new-customer eligibility needs order-history checks and a clear policy for guest purchases.

Where available for the selected discount type, “Limit usage to X items” caps the quantity of items that receive the discount. It doesn’t cap orders or total savings. Leave it blank for TAKEAWAY10 if every qualifying, non-sale unit should receive 10% off.

Make the conditions visible before checkout

Place the offer near the relevant menu section, in a restrained website banner, and in customer emails where appropriate. Use wording that matches the actual rules:

Use TAKEAWAY10 for 10% off selected dishes on merchandise orders of $30 or more. Sale items excluded. One use per customer. Cannot be combined with other coupon codes.

Add the genuine end date and any separately enforced fulfillment condition. Avoid saying “10% off your order” when delivery, drinks, tips, or other items aren’t discounted.

Native coupons generally require manual entry. Automatic application, a scheduled start date, recurring windows, and advanced eligibility checks may require an extension or development. An expiry date alone doesn’t delay activation: once published, an otherwise valid coupon can be used.

Test Discounts Before Customers Use Them

Test on staging first, with payment gateways in their test or sandbox mode. After deployment, make a controlled check of the live cart and checkout too; staging won’t reveal every production layout or configuration difference.

Write down expected results before applying the code. Otherwise, it’s surprisingly easy to accept a plausible-looking total that implements the wrong promotion.

A repeatable test matrix

  • Eligible dishes: Add $40 of qualifying, non-sale dishes. Expect a 10% reduction on those eligible prices; record tax separately.
  • Excluded products: Add $24 of eligible dishes and $8 of excluded drinks. Confirm the minimum passes but drinks receive no discount.
  • Quantities: Try one unit, several units of the same dish, and multiple qualifying dishes. Verify any item limit.
  • Minimum boundaries: Test merchandise subtotal plus tax at $29.99, $30, and $30.01, using suitable test products or tax settings.
  • Sale items: Test mixed regular-price and sale dishes, then an all-sale cart. Ensure excluded items aren’t discounted.
  • Competing codes: Apply another coupon before TAKEAWAY10, then reverse the order. Confirm only the permitted code remains.
  • Customer identity: Try guest and logged-in checkout, permitted and unpermitted billing emails, and a repeat attempt after completing an order.
  • Mobile and fulfillment: Apply the code on a phone, change quantities, and switch pickup or delivery. Check that totals and any custom eligibility rules update.

Also remove an eligible dish after applying the coupon. If the revised cart no longer meets the minimum, WooCommerce should reject or remove the discount rather than preserve the earlier savings.

[IMAGE: Mobile restaurant checkout test showing eligible pizzas, an excluded drink, TAKEAWAY10 savings, and separate rows for tax, delivery, tip, and the final total]

Reconcile every charge

For a deliberately simplified no-tax example, $40 of eligible food plus $8 of excluded drinks gives $48 in merchandise. TAKEAWAY10 removes $4. Add a $5 delivery charge and an unchanged $3 tip, and the expected final total is $52.

That example isn’t a universal tax formula. In taxable stores, WooCommerce generally calculates product taxes on discounted taxable amounts; inclusive pricing, mixed tax classes, shipping tax, and rounding can change the breakdown.

Complete the test order and inspect its administration screen. Compare product lines, coupon discount, taxes, shipping, fees, and final total with checkout. Check the customer email and any kitchen or receipt output that staff use.

Check tipping behavior explicitly

If you offer gratuities, Tipping’s checkout tip options for WooCommerce support preset and custom amounts. Test those options alongside coupons rather than assuming how their calculations interact.

Check whether percentage tips use the amount you intend before or after discounts, whether a selected tip recalculates after a cart change, and whether fixed tips remain unchanged. The result depends on the extension and configuration. A product coupon shouldn’t be advertised as discounting every checkout charge.

Fix Common Coupon Problems and Review Promotion Results

When a coupon fails, check its settings before blaming the checkout. Most problems are a mismatch between the cart and a rule—or between the advertised terms and the configured rule.

Work through failures in order

For an invalid-code message, confirm that the coupon is published and the entered code matches it. Retype copied codes to rule out stray spaces or punctuation, then check expiry against the WordPress timezone.

If the code exists but won’t apply, inspect minimum and maximum spend, eligible categories, product exclusions, sale status, and the billing email. An item can look like the right dish while being a different product or variation from the one selected in the restriction.

Next, check total and per-user usage limits. Previous testing may already have consumed a redemption. Review order statuses and cancellation or refund handling before changing limits; don’t assume every abandoned payment attempt or refund has identical effects.

Missing coupon fields are often a layout issue. Classic checkout may hide entry behind a “Have a coupon?” prompt, while Cart and Checkout blocks can use an expandable coupon section. Check global coupon enablement, the active page editor, theme overrides, and checkout extensions.

If totals appear stale, verify that cart and checkout aren’t being served from full-page cache. Reproduce the issue with a fresh session after configuration changes.

Measure redemptions without mistaking them for profit

Where enabled, open Analytics → Coupons in WooCommerce to review coupon usage and discount amounts over a chosen date range. Available reports or coupon-filtered order views may also show sales associated with redeemed codes.

Those sales aren’t automatically incremental revenue. Some customers would have ordered anyway, and sales totals don’t subtract food costs, packaging, payment fees, or delivery subsidies. Compare order contribution, basket size, and repeat purchasing—not just redemption counts.

Before launch, make one final pass:

  • Confirm the wording matches the configured eligibility.
  • Check expiry, timezone, and usage limits.
  • Pass the cart, checkout, tax, and tipping tests.
  • Verify the completed order and staff-facing output.
  • Set a date to review results.

A useful coupon is predictable for everyone: customers understand the savings, staff recognize the offer, and the restaurant can afford each redemption. Get those parts right before putting the code on the menu.

Commission-free ordering

Run restaurant orders on your own WordPress site

FoodMaster adds delivery, pickup, dine-in, POS, and kitchen tools — with zero per-order fees.

Get FoodMaster

Leave a Comment

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

×

🔥 ONE DAY ONLY OFFER 🔥

Upgrade FoodMaster Today

Normally your license is limited to 1 Website.

Today only, get a LIFETIME Unlimited Websites License for just:
$499

✔ Unlimited Client Websites
✔ Unlimited Personal Projects
✔ Future Updates Included
✔ Save Hundreds on Additional Licenses

Offer Ends In: