Skip to main content
A customer who follows your link often has a cart already. Three switches decide what happens to it, under Settings → Cart behaviour → Existing cart.

The three switches

Clear the existing cart answers the other two for you. While it’s on, the settings screen shows them disabled with the note “Disabled while the cart is cleared.” They stay visible so the note can explain why they’re off.

Clear the existing cart

Nothing survives: not the customer’s own shopping, not another preset, not an earlier copy of this one. Use it when the link is the whole offer and you want the customer to arrive holding exactly that. Think of a one-click campaign where anything else in the cart is a distraction.
This deletes things the customer chose themselves. If people browse your store and build a cart over several visits, it’s an aggressive default to take.
Anyone who follows the link has their cart emptied first, wherever they found it. A link you share can be posted anywhere, so bear that in mind before you turn this on store-wide.

Allow duplicate presets

If the cart is left standing, this decides what happens when someone follows the same link twice. Off (the default) means a second visit replaces the first copy. The earlier lines are removed and a fresh set added. They have to go, because the new set gets a new instance ID, and leaving the old lines would always give a second copy. On means they end up with two.

Keep existing items

If the cart is left standing, this decides whether the customer’s own non-preset lines survive. It’s on by default. A link never removes another preset’s lines unless the whole cart is cleared.

Preset instances

Every time someone follows a link, the lines it adds are stamped with an instance ID. The ID keeps each copy separate, so two copies of the same preset can sit in one cart with their own pricing, and removing one item removes the right set.

Removing an item removes the set

Deleting one line of a preset from the cart removes the whole instance, with a notice saying so. The price was quoted for the set. If a customer could delete the expensive half of a discounted pair, they’d get the discount without the bundle. To exempt one line, use Customer can remove this item. See Items.

A preset is whole or not there at all

The rule works in both directions. WooCommerce’s Undo? link after a removal brings back the whole preset, including the lines the customer didn’t click. If the preset can’t be put back together, none of it comes back. The same check runs whenever a cart is loaded, including a saved cart merged in when a customer signs in. A preset that’s missing a line it can’t do without is taken out, with a notice.

Editing a preset that customers hold

If you delete an item from a preset, or swap the product or variation on it, any cart holding that preset loses the whole preset. The customer reads That preset has been removed from your cart because one of its items was changed. They can follow the link again to get the preset as it stands. Other edits don’t do this. An open cart follows the preset’s current settings, the same way it follows a product’s price. Change a discount and the next page the customer loads shows the new price, and that’s what checkout charges.

Quantities

By default a preset line’s quantity is locked, and trying to change it in the cart shows a notice. You can allow changes item by item, with a minimum and a maximum. See Items.

Prices hold

A preset line is priced by the preset, not by the product. That holds through every recalculation: applying a coupon, changing a quantity, picking a shipping method. The price is never read back off the cart line. WooCommerce recalculates several times per request, and a line may already carry a discounted price from an earlier pass. Reading the baseline from there would apply the discount again on every recalculation, so the price would drop as the customer clicked around.

Both carts

Everything here works the same in the classic cart and in the Cart and Checkout blocks: pricing, quantity locks, cascade removal, and notices. Notices need extra handling. On a classic theme the blocks never print WooCommerce’s classic notice queue, so messages would sit in the session until some other template dumped them all at once. CartPresets puts the pending queue at the top of both blocks, using WooCommerce’s own notice templates.

Per-preset override

The editor asks the same three questions for a single preset, in its Cart behaviour card under Existing cart. That block has two modes, Store default and Override, and a new preset starts on Store default. In that mode the switches are hidden. A line names the store’s current answer instead, such as “Using the store default: Keep existing items.”, with a Change it in Settings link. Choose Override and the three switches appear, and they’re yours for this preset. They start from the store’s current answers, so nothing changes under your hands. Clear the existing cart settles the other two here exactly as it does store-wide, and you can turn it off again to get them back. Choose Store default again and the preset follows the store once more. A preset overrides all three or none of them, so one screen tells you how its cart will behave.

For developers

cartpresets_clear_cart filters the resolved outright-clear decision: the store’s answer, or the preset’s own when it overrides. It fires once per link, before the limit check, so the filter and the removal can’t reach different conclusions. The two narrower settings are read only when it resolves false. See the hooks reference.
Last modified on September 28, 2026