Advanced Coupon Restrictions for WooCommerce Documentation and FAQ

Advanced Coupon Restrictions for WooCommerce, by Naked Cat Plugins, lets you restrict WooCommerce coupons by cart quantity, any product taxonomy, user account, role or amount spent, billing and shipping country, state or postcode, and subscription order type, going well beyond what WooCommerce coupons offer on their own. This page covers setup, every restriction tab, coupon groups, compatibility, licensing, and developer hooks. For pricing and installation, see the product page.

Support

How to request technical support?

If the issue you need technical support with is not covered on this page, click the link next to the license key, on the plugin settings, and fill out the ticket with your request.

Where do I report security vulnerabilities found in this plugin?

You can report any security bugs found in the source code of this plugin through the Patchstack Vulnerability Disclosure Program.

The Patchstack team will assist you with verification, CVE assignment and take care of notifying us.

General operation

Getting started guide

Install and activate the plugin, then go to WooCommerce > Settings > Advanced > Advanced Coupon Restrictions and insert the license key you received with your order. The restrictions only become available once the license is active.

Then edit any coupon under Marketing > Coupons. Next to WooCommerce’s own “General”, “Usage restriction” and “Usage limits” tabs you will find the tabs this plugin adds:

  • Advanced quantity usage restriction
  • Advanced taxonomy usage restriction
  • Advanced user usage restriction
  • Advanced regional usage restriction
  • Advanced subscription usage restriction (only when WooCommerce Subscriptions is active)

Fill in only the restrictions you need. Anything left empty is simply not checked.

How do multiple restrictions work together?

Every restriction you set has to be satisfied for the coupon to be accepted. They combine with “and”, never with “or”, which is why the coupon tabs show an “And” separator between each group of fields.

This includes WooCommerce’s own restrictions. If you set the core “Allowed emails” field and this plugin’s “Only for these users” field, the customer has to match both.

The one exception is the “Except” section in the user restrictions: a customer who is blocked there can never use the coupon, whatever the rest of the settings allow.

Why do some restrictions only fail at the checkout?

The regional restrictions, and the blocked email addresses for guest customers, depend on information that does not exist until the customer reaches the checkout and fills in the address form.

Until then there is nothing to compare, so the coupon is accepted in the cart and refused at the checkout with a message explaining why. This is expected behaviour, not a bug.

Quantity restrictions

How to restrict a coupon by the number of items in the cart?

On the “Advanced quantity usage restriction” tab:

  • Min. quantity and Max. quantity count the total number of items in the cart, so three of the same product count as three.
  • Min. unique products and Max. unique products count cart lines instead, so three of the same product count as one.

Leave a field empty to not check it. You can combine both pairs, for example a coupon that needs at least 10 items across at least 3 different products.

Product taxonomy restrictions

How to restrict a coupon to product tags, brands or attributes?

On the “Advanced taxonomy usage restriction” tab you will find one “include” and one “exclude” field for every product taxonomy registered on your shop: product tags, brands, shipping classes, custom taxonomies, and any global product attribute.

  • The include field makes the coupon valid only for products in those terms.
  • The exclude field makes the coupon invalid for products in those terms.

Product categories are deliberately not repeated here, because WooCommerce already has that field in its own “Usage restriction” tab.

Why is a product excluded by taxonomy still discounted?

Check that the products in the cart really carry the term you excluded, and that you used the “exclude” field rather than the “include” one. The two read similarly but do opposite things.

If your shop runs WPML, make sure you are testing with a coupon that has been translated through WPML’s normal translation flow rather than duplicated as a second coupon with a different code.

User restrictions

The “Advanced user usage restriction” tab is organised into three parts: who the coupon is reserved for, what the customer has to be, and who is blocked outright.

How to reserve a coupon for specific customers?

In the Only for section, use Only for these users to pick one or more customer accounts. Start typing a name or email and pick from the results. Only those accounts will be able to use the coupon, and guest customers never will.

This is the safest way to issue a personal coupon. WooCommerce’s own “Allowed emails” field, in the “Usage restriction” tab, accepts the email typed into the checkout, so anyone who is given the address can use the coupon without logging in. Restricting by user account cannot be used that way, because the customer has to actually be logged in as that person.

Only for these emails in the same section is a reminder, not a field. Email allowlisting is set with WooCommerce’s own “Allowed emails” field, and we do not duplicate it. If you fill in both, the customer has to match both.

How to restrict a coupon to logged-in or guest customers?

User’s login status offers three choices: available for all users, available for logged-in users only, or available for guest users only. It is a good way to push customers into creating an account.

How to restrict a coupon to a user role?

User roles accepts any number of roles registered on your site, so you can reserve a coupon for wholesalers, members, or any custom role.

The list also contains a Guests (not logged in) entry, which is not a real role. Choose it together with one or more roles to allow both at once, for example “Customer” plus “Guests (not logged in)” for a retail coupon that everyone except your wholesale accounts can use.

If you only choose real roles, guest customers will not be able to use the coupon, because a visitor who is not logged in has no role.

How to restrict a coupon by how much a customer has spent?

User total amount spent compares the customer’s lifetime spend on your shop against a value you enter:

  • Zero, for a first paid order or new customer coupon
  • At least, for an existing customer coupon
  • At most
  • At most but spent something, which excludes customers who have never bought anything

This only works for logged-in customers, since there is no spending history for a guest. If you set it, guests cannot use the coupon.

How to block specific customers from using a coupon?

In the Except section at the bottom of the tab:

  • Never for these users blocks customer accounts, picked the same way as the “Only for” field.
  • Never for these emails blocks email addresses, one per line or separated by commas, whichever you prefer.

A customer blocked here can never use the coupon, whatever the other restrictions allow.

Can I block a whole email domain from a coupon?

Yes. Blocked email addresses accept a * wildcard, so *@example.com blocks every address at that domain. This is the quickest way to shut down abuse coming from a disposable address provider.

Blocked addresses are checked against both the customer’s account email and the billing email typed at the checkout, so they work for guest customers too. A guest will be able to apply the coupon in the cart, because their email is not known yet, and will be stopped at the checkout.

Regional restrictions

How to restrict a coupon by country, state or postcode?

On the “Advanced regional usage restriction” tab, first choose the Type of address to match: billing or shipping (either one matching is enough), billing only, or shipping only. That choice applies to every rule below it.

Then set any combination of:

  • Countries and Exclude countries
  • States and Exclude states
  • ZIP/Postcodes

These are checked at the checkout, not in the cart, because the address does not exist before then.

What postcode formats are accepted?

The ZIP/Postcodes field takes one entry per line, in any of three forms:

  • An exact postcode, for example 1000-001
  • A wildcard, for example 123*, *123 or 12*34
  • An interval, for example 123...999

You can mix all three in the same list.

Subscription restrictions

How to stop a coupon applying to subscription renewals?

The “Advanced subscription usage restriction” tab appears only when WooCommerce Subscriptions is active. Subscription order type offers:

  • Available for all orders
  • New subscriptions only (initial order)
  • Not for new subscriptions
  • Renewals only
  • Not for renewals

“Not for renewals” is the usual choice for a sign-up promotion that should discount the first payment only.

Coupon groups

How to organise a large number of coupons?

The plugin adds a Coupon groups taxonomy to your coupons, managed under Marketing > Coupon groups. Assign coupons to groups the same way you would assign categories to a post.

The coupons list then shows a “Coupon groups” column and a filter dropdown, which makes a few hundred coupons manageable. Groups are organisational only: they do not affect whether a coupon is valid.

Compatibility

Does this plugin work with WPML?

Yes. When WPML and WooCommerce Multilingual are active, the taxonomy term IDs saved on a coupon are translated to the language being browsed, for both the include and the exclude fields, so a restriction set in your default language keeps working in every translation.

Coupons should be created once and translated through WPML’s normal translation flow for coupons. Creating a separate coupon per language does not work, because WooCommerce requires coupon codes to be unique.

Does this plugin work with the blocks checkout?

Yes. All restrictions are validated on both the classic checkout and the WooCommerce Blocks checkout.

Does this plugin work with High-Performance Order Storage?

Yes, HPOS compatibility is declared and supported.

Licensing

What happens if my license expires?

Every restriction keeps working exactly as before. Nothing is capped or switched off, the coupon tabs stay available, and coupons already set up carry on being validated as normal.

What you lose is automatic updates, including security and compatibility updates for new WordPress and WooCommerce versions, translation updates, and technical support. A notice appears on the plugin settings and on the plugins screen until you renew.

How to transfer the license to another domain?

You should ask for the domain change in your customer area, next to the original order details.

After you get the reply from us stating that the license key is free, you should go to the old website settings, remove the key and save. Then go to the new website settings, insert the same key and save. If you cloned the website, the license key is on the database, and you need to remove it, save, insert it again and save again.

Developers

Which filters does this plugin provide?

ptwoo_coup_res_tax_ids

Filters the taxonomy term IDs a coupon is restricted to, for the “include” fields. Receives the array of term IDs and the taxonomy name.

ptwoo_coup_res_tax_exclude_ids

The same, for the “exclude” fields.

ptwoo_coup_res_taxonomies_to_remove

Filters the list of product taxonomies that are hidden from the taxonomy restriction tab. Defaults to product_visibility and translation_priority. Add your own to keep internal taxonomies out of the coupon screen.