Skip to main content
Setting a limit is a Pro feature. Counting and enforcing one isn’t. Both versions record claims and honour a cap that’s already set, so moving to the free version never puts a sold-out link back on sale. On the free version the fields are shown locked with a Pro tag, and so is Settings → Usage limits.
A limit caps how many times the offer can be claimed. Set Maximum orders, Maximum orders per customer, or both. Leave a field empty for no limit. The note under Maximum orders keeps count, for example 12 of 50 used so far.

Claims, not units

  • A limit caps how many times the preset is claimed. A total of 50 means 50 people can follow the link and buy.
  • A quantity rule caps what one claim holds. A maximum of 3 means one person can take up to three of that item.
The two multiply. A total of 50 with a quantity of 3 can move 150 units.

Which orders consume a slot

A slot is taken when an order enters one of the statuses you choose, under Settings → Usage limits → Count orders with these statuses. The default is On hold, Processing and Completed. Clear every box and the default comes back. On hold is in there because a bank-transfer order is a real commitment. Leave it out and everyone who pays by transfer could oversell a limited run.

A checkout holds its slot

Between checkout and payment, an order hasn’t reached a counted status yet. So a customer who gets through checkout holds a slot while they pay. Two customers racing for the last slot can’t both get it. Once the order exists, the slot stays held until the order is paid, cancelled, fails or is refunded. Payments can arrive late: a customer comes back from a payment page, or retries a declined card an hour later. The slot is still theirs when they do. WooCommerce cancels unpaid orders after its Hold stock (minutes) setting, under WooCommerce → Settings → Products → Inventory, and that gives the slot back. If your store doesn’t hold stock, nothing cancels an abandoned order, so a hold gives up on its own after a day. On the classic checkout there’s a short gap before the order is created. That gap uses the Hold stock time, or 60 minutes if it’s empty. Paying for an existing order, such as a failed payment the customer retries from Pay for order, checks the preset again: that it’s still on sale, not past its end date, within its caps, and still open to that customer. If it isn’t, the payment is refused. One order counts once, even if a payment gateway and the customer’s return both complete it at the same moment.

A payment that arrives too late

Sometimes a payment lands after its hold ran out, and someone else has taken the slot in the meantime. The order is counted anyway. The customer has paid, and refusing them at that point would mean a refund they didn’t cause. You’ll see it on the order. A note says the order takes the preset past its purchase limit, and why. What to do next is up to you. You can honour it, contact the customer, or refund.

Slots come back

Recording is reversible. An order that leaves the counted statuses releases its slot, so a cancelled or refunded order doesn’t permanently eat part of a limited run. Without this, a run of 50 with ten cancellations sells 40 and reports itself sold out. It also means a sold-out preset goes back on sale when a slot is freed, and the listing says so.
Renewal orders never consume a slot. Otherwise a subscription renewing monthly would use up a capped preset on its own.A resubscribe is different. A customer who resubscribes to a cancelled or expired subscription is buying the offer again, so the resubscribe counts as a new purchase against the preset’s limits, whichever checkout they use.

Sold out versus you already have one

The limit check counts what will survive, not what’s in the cart right now. If a customer follows the link while already holding the last slot, they’re told that preset is already in your cart, not sold out. The check asks whether one claim would fit on its own, which keeps the two cases apart. Which of the two they meet also depends on your cart behaviour settings. An earlier copy counts against the cap only when the cart is left standing and duplicates are allowed.

Per-customer caps and who counts as a customer

For signed-in customers, the account. For guests, the billing email, the same way WooCommerce’s own per-user coupon limits identify people. The field’s note says so: Counted by account, or by email for guests. A signed-in customer and a guest with the same email are one person. An account’s allowance includes orders placed as a guest under its email or billing email, and the other way round. Signing out doesn’t give anyone a fresh allowance. Matching guests by email is a best effort, and someone determined can get around it. A per-customer cap keeps an honest introductory offer to one per person. It isn’t a security boundary. Developers can change how a customer is recognised through cartpresets_redemption_customer_key. See the hooks reference.

What a capped-out customer sees

There are two messages, both editable under Settings → Messages and labels: A preset whose total is used up reads as Sold out. Both messages land the same way every refusal does. The Unavailable links setting decides where the customer goes (Cart or Custom URL) and whether they’re told why at all. See Where customers land.

Settings reference

Both caps sit in the Usage restrictions card, under Purchase limits, beside Preset ends on.
Last modified on September 28, 2026