How to Create WooCommerce Coupons: Discount Codes and Free Shipping (2026)

A coupon that looks harmless in the dashboard can become expensive at checkout. Ten percent off dinner is one thing; ten percent off dinner, stacked with another offer and free delivery outside your normal area, is quite another. WooCommerce gives you the essentials without an extra coupon plugin: percentage discounts, fixed discounts, restrictions, usage limits,...

September 12, 2026 WPSlash

A coupon that looks harmless in the dashboard can become expensive at checkout. Ten percent off dinner is one thing; ten percent off dinner, stacked with another offer and free delivery outside your normal area, is quite another.

WooCommerce gives you the essentials without an extra coupon plugin: percentage discounts, fixed discounts, restrictions, usage limits, and coupon-enabled free shipping. This 2026 guide walks through the setup, using a restaurant promotion alongside examples that work for other online stores.

How WooCommerce Coupons Work—and Which Discount to Choose

A native WooCommerce coupon is a code customers apply to their cart or checkout. WooCommerce checks its conditions, then calculates the discount against eligible products. It doesn’t automatically discount everything simply because you’ve published the code.

The three built-in discount types

Percentage discount takes a percentage off eligible items. A 10% coupon saves $4 on $40 of qualifying pizza and sides. If drinks are excluded, their price doesn’t receive that discount. This type suits promotions across products with different prices, though bigger baskets can mean bigger discounts.

Fixed cart discount takes a set amount off the eligible cart, subject to its restrictions. A $5 discount on a qualifying $40 basket reduces the merchandise total to $35 before any applicable tax recalculation. It’s useful for offers such as “Save $5 when you spend $30.” WooCommerce distributes the discount across items for calculation purposes.

Fixed product discount takes a set amount off each eligible item. A $2 discount on a qualifying burger normally saves $6 when the customer buys three. The same principle works for candles, T-shirts, or coffee bags. Watch quantities: “$2 off” doesn’t necessarily mean $2 off the whole order.

Ordinary coupon discounts don’t reduce shipping charges. Free shipping uses a separate coupon setting and a compatible shipping method, which we’ll configure below.

What needs additional functionality?

Core WooCommerce supports expiry dates, spending thresholds, product restrictions, and usage limits. Automatic application, genuine first-order eligibility, recurring promotional windows, and advanced scheduling generally require an extension or custom development.

Likewise, a native percentage coupon doesn’t include a standard “maximum discount of $10” field. Maximum spend restricts which baskets qualify; it doesn’t cap the savings. For a predictable introductory offer, I’d usually start with a fixed-cart discount and a sensible minimum spend.

Create Your First WooCommerce Coupon Step by Step

Let’s create TAKEAWAY10: 10% off selected pizzas and mains with a $30 minimum spend, limited to one redemption per customer. We’ll add its restrictions in the next section.

One caveat before naming your offer: a code containing “takeaway” doesn’t enforce pickup-only eligibility. Core coupon settings don’t understand every restaurant ordering extension’s fulfillment options. Restricting a coupon to pickup may require compatible additional rules.

Enable coupons and add your code

  1. Open WooCommerce → Settings → General. Find “Enable the use of coupon codes,” select it, and save changes.
  2. Go to Marketing → Coupons and choose “Add coupon.” On an older installation, its menu location may differ.
  3. Enter TAKEAWAY10 as the coupon code. A short, readable code is easier to type from a printed flyer than a random string.
  4. Add an internal description, such as “Spring menu campaign: selected pizzas and mains, $30 minimum, one redemption per customer.”
  5. Under Coupon data → General, select “Percentage discount” and enter 10 as the coupon amount. Don’t add a percentage sign or currency symbol.
  6. Leave “Allow free shipping” unchecked for this promotion. Set a coupon expiry date, then complete the restrictions before publishing.

For a fixed-cart or fixed-product coupon, enter the monetary amount instead—for example, 5 for a $5 discount in a dollar-denominated store. Coupon calculations use your store’s currency settings.

Check the site timezone under Settings → General before planning a time-sensitive launch. The standard expiry control is date-based, not a full campaign scheduler. If you advertise an exact closing time, confirm the cutoff behavior on your installation or use suitable scheduling functionality.

[IMAGE: WooCommerce coupon editor showing TAKEAWAY10 with Percentage discount selected, an amount of 10, free shipping unchecked, and the expiry date field highlighted]

Write customer-facing terms separately

The coupon description is an administrative note. Customers don’t automatically see it as the offer’s terms. Publish the eligible items, minimum spend, expiry, exclusions, and redemption limit in your email, menu banner, or landing page.

For a restaurant website, FoodMaster’s WooCommerce restaurant ordering system provides the ordering foundation for delivery, pickup, and dine-in orders. Configure the promotion through WooCommerce, then test it through the actual FoodMaster ordering journey—including modifiers and fulfillment choices—rather than assuming a basic product-page test covers everything.

Set Spending Rules, Product Restrictions, and Usage Limits

Open the coupon’s Usage restriction tab. This is where a broad discount becomes a controlled promotion. Keep the rules understandable: a coupon that needs a paragraph of exceptions before lunch probably needs simplifying.

Minimum and maximum spend

Set Minimum spend to 30 for TAKEAWAY10. WooCommerce documents the minimum-spend check as using the cart subtotal plus tax; it isn’t simply the final amount payable after discounts and shipping. Test with your actual tax configuration, especially if menu prices include tax.

Maximum spend sets an upper eligibility threshold. Entering 100 means baskets above that threshold won’t qualify—it does not limit the discount to $100. Leave it blank unless there’s a practical reason to reject larger orders.

Also, the spending threshold isn’t automatically a minimum purchase of the selected category. A mixed basket can meet the cart-level minimum while only its eligible items receive the percentage discount. “Spend $30 on pizzas” may therefore require rules beyond the native setup.

Products, categories, and sale items

For our example, select Pizzas and Mains under Product categories. A qualifying pizza receives the percentage reduction; a drink outside those categories doesn’t. Use the Products field for individual items, or exclusion fields to keep particular products or categories out.

Product and category restrictions behave differently with fixed-cart coupons: excluded items can make the entire cart ineligible. The same caution applies to sale-item exclusions with fixed-cart discounts. Don’t assume the coupon will simply skip the unwanted item and discount everything else.

For TAKEAWAY10, enable “Exclude sale items” if discounted menu products should stay outside the offer. Check bundles and modifiers separately; an extension’s special pricing isn’t necessarily represented as a native WooCommerce sale price.

Combination rules, email restrictions, and limits

Select “Individual use only” to prevent combining this coupon with other coupons. That doesn’t prevent every other source of discounted pricing, such as sale prices or extension-managed deals.

Allowed emails restricts redemption to specified billing email addresses and supports wildcard matching. It’s useful for targeted offers, but an email match isn’t proof of identity or membership.

Under Usage limits, “Usage limit per coupon” controls total redemptions across customers. “Usage limit per user” controls redemptions associated with an individual customer, using account identification or billing-email checks as applicable. Where available, “Limit usage to X items” controls how many eligible items receive a product discount.

One use per customer is not first-order-only eligibility. An existing customer who hasn’t used TAKEAWAY10 may still redeem it. Guests can also change email addresses, so these controls reduce casual overuse rather than provide fraud-proof enforcement.

Offer Free Shipping Without Accidentally Giving Away Delivery

The coupon’s “Allow free shipping” checkbox is only half the setup. WooCommerce also needs an enabled Free shipping method in the shipping zone that matches the customer’s address.

Connect the coupon to a shipping method

Go to WooCommerce → Settings → Shipping → Shipping zones. Edit the relevant zone, add Free shipping if necessary, and open that method’s settings.

The “Free shipping requires” setting offers several choices: no requirement, a valid free-shipping coupon, a minimum order amount, either a minimum amount or a coupon, or both a minimum amount and a coupon.

For a code-only promotion, choose the valid-coupon requirement. Then create a separate coupon such as LOCALFREE, use a fixed-cart discount amount of 0, and enable “Allow free shipping.” The coupon supplies eligibility without adding a merchandise discount.

If delivery should be free only above $40 and with the code, choose the requirement that needs both conditions. Choosing “either” would allow a qualifying customer to get free shipping without the coupon.

For minimum-order requirements, check the setting controlling whether the threshold is evaluated before coupon discounts. A $42 basket reduced by $5 could fall below a $40 shipping threshold if the requirement is assessed after discounting.

[IMAGE: WooCommerce shipping-zone settings for a local delivery area, with Free shipping requiring both a valid coupon and a $40 minimum order, alongside a checkout showing the resulting shipping choice]

Restaurant delivery fees may be separate

A restaurant delivery charge can be a WooCommerce shipping-method cost, an extension-added checkout fee, or a separately calculated distance surcharge. Native free shipping doesn’t automatically erase those other charges.

Place a test order and inspect how delivery appears in the totals and order details. Confirm with your ordering extension’s settings or documentation whether it uses native shipping methods and supports coupon-based free delivery.

WooCommerce uses the first matching shipping zone, not every zone that could cover an address. Order local zones carefully. Finally, test pickup separately: customers shouldn’t need to choose a misleading “Free shipping” option just to collect their dinner.

Test Your Coupon and Fix Common Problems

Test before distributing the code, ideally on staging with payment test mode enabled. A successful cart calculation is useful, but completing an order also checks usage tracking, shipping selection, and the final amount recorded.

A practical testing checklist

  • Eligible and excluded products: Try a qualifying item, an excluded item, and a mixed basket. Include sale products, variations, modifiers, and multiple quantities where relevant.
  • Spending boundaries: Test just below, exactly at, and just above the threshold. For a tax-free $30 example, use $29.99, $30, and $30.01; repeat under your real tax settings.
  • Customer identity: Test a logged-in account and guest checkout. Complete an order, then attempt another redemption to check the per-user limit.
  • Coupon combinations: Apply the new code before and after another active coupon. Check the resulting messages and which discounts remain.
  • Mobile checkout: Enter the code on a real phone, check the updated totals, and complete the payment test.
  • Expiry and shipping zones: Try an expired test coupon, addresses inside and outside the delivery area, and an address near a zone boundary.

“Coupon is invalid” or won’t apply

First confirm that the coupon is published and the entered code matches. Copying from an email can introduce stray spaces or punctuation. Then check expiry, total usage, customer usage, billing-email restrictions, and spending requirements.

Read the actual error message before changing settings. A valid code can fail because the cart contains an excluded product, the qualifying subtotal is too low, or the allowed email doesn’t match the checkout billing address.

The coupon field is missing

Check the global coupon setting first. Next, identify how the cart and checkout are built: WooCommerce Cart and Checkout Blocks don’t use the same rendering system as classic shortcode-based pages.

On block-based pages, inspect the Cart or Checkout block and its order-summary coupon area in the editor. On classic pages, investigate template overrides, theme settings, and custom code that removes the coupon form. A snippet written for classic checkout hooks may have no effect on Checkout Blocks.

Restaurant ordering interfaces can introduce another cart or checkout layer. Verify that customers can reach a supported coupon entry point in the ordering flow they actually use. Test customization changes on staging rather than dismantling a live dinner service.

The discount or final total looks wrong

Check whether you selected fixed-product instead of fixed-cart discount—a common reason savings multiply with quantity. Review eligible products, existing sale prices, other coupons, tax adjustments, and any additional fees.

Percentage coupons don’t ordinarily discount shipping. Conversely, a free-shipping coupon can leave paid shipping methods visible, depending on WooCommerce settings and customizations. Check which method the customer selected, not merely which methods appeared.

Free shipping doesn’t appear

Confirm the address matches the intended zone, its Free shipping method is enabled, and the applied coupon allows free shipping. Recheck whether the method requires a coupon, a minimum spend, or both. If checkout shows a separate delivery fee, changing native shipping settings alone won’t remove it.

Measure Results and Keep Promotions Profitable

A coupon can generate orders and still be a poor promotion. The useful question isn’t just “How much did customers spend?” It’s “What did the offer change, and what did those orders leave behind?”

Review coupon usage and associated orders

Where WooCommerce Analytics is enabled and its data is current, open Analytics → Coupons. Set the campaign date range, review coupon-level discounted orders and discount amounts, and inspect associated orders through the available report links or order filters.

Check actual order totals, refunds, shipping charges, and product mix. Coupon reports identify orders using a code; they don’t prove those orders happened because of the promotion. A loyal customer may simply have used a discount on dinner they already planned to buy.

Separate codes by distribution channel

Use distinct codes such as EMAIL10, FLYER10, and RETURN10 for email, printed restaurant flyers, and repeat-order campaigns. Keep their terms consistent when comparing channels, or you’ll be comparing different offers as well as different audiences.

Codes can be shared, so they’re an attribution clue rather than perfect channel tracking. Add campaign-tagged links to digital promotions and flyer QR destinations. For deeper setup guidance, use the site’s GA4 tutorial search and abandoned-cart tutorial search to find relevant tracking and recovery walkthroughs.

Calculate contribution, not just revenue

Here’s a simplified example, excluding tax: a $40 order has $24 in variable costs before promotion. A 10% discount leaves $12 in contribution instead of $16. Absorbing another $4 of delivery cost brings that down to $8.

Those are illustrative numbers, not industry benchmarks. Use your own ingredients or product costs, packaging, payment fees, delivery expense, and incremental labor. Where practical, compare similar periods or a group that didn’t receive the offer, then examine repeat purchases.

Start with one clear offer, limited exposure, and a tested checkout. Expand it when the economics work—not just when the redemption counter looks busy.

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: