Skip to main content
You can edit every sentence and label a customer reads, under Settings → Messages and labels. There are twenty-one, in four groups: Error messages, Warning messages, Cart messages and Labels. Each group shows how many messages it has and how many you’ve customised. Its Edit wording button opens the fields. The screen shows twenty-two fields for them: limit_customer changes with the number, so you edit it as a singular and plural pair. To find one message, type in the search box above the groups. It matches the wording and the row name, which says when the message shows, and it opens every group so the matches are in view. A rewritten field gets a Customised badge, the shipped wording under it (Default: “…”), and a Reset to default button. Leave one blank and the shipped wording is used. You only ever store what you changed, so an improved default reaches you automatically. The tables below list each message by the row name the screen shows.

Error messages

Ten messages for a link that couldn’t be followed, one for each of the ten ways a link is refused. See Where customers land for where the customer goes next. item_blocked only shows when Settings → Cart behaviour → Unavailable items is set to Refuse the preset.
Write not_found for a stranger. Anyone can guess a URL, and the shipped wording deliberately doesn’t say whether the preset ever existed. You can’t switch it off either, because an empty override falls back to the default, so it has to be safe in front of anyone.
not_signed_in and role_not_allowed are store-wide, not per preset. You write them once here and every link uses them, so a wholesale link and a staff link say the same thing.

Warning messages

Four messages for a link that worked with a caveat. Nothing here is a refusal: something reached the cart, so the customer keeps it and Redirect after adding decides where they land.

Cart messages

Four messages about editing a preset that’s already in the cart.

Labels

Three labels rather than notices, shown on the cart line, the order, and in emails.
cart_line is the one most stores change. “Part of preset” is accurate but a little technical. “Bundle”, “Included in your kit” or your campaign’s own name often reads better to a customer.

Placeholders

Five messages contain a placeholder that carries a value: They’re checked when you save. Dropping a placeholder leaves a sentence that reads like a typo, such as “limited to purchases per customer”. Adding one would break the cart page in front of a customer. Either is refused. The save stops, the group holding the row at fault opens, and the error shows under that row, so you can’t save a message that would fail later.

The one plural

limit_customer is the only message whose grammar changes with the number, so it’s stored as a pair: singular and plural. Each one falls back on its own. Rewrite only the plural and you get your sentence for two and the shipped one for one, rather than “1 purchases”.
If your store translates into a language with more than two plural forms, you’re better off leaving this one at its default. The default keeps proper plural handling in every locale. An override has exactly two forms, whatever the language.

Translating

There are two halves, and they translate differently. Wording you haven’t touched goes through WordPress’s normal translation functions, and it’s in the .pot file like everything else. You don’t need to do anything. Wording you’ve rewritten is a value in an option, and an option value is data, not a translatable string. CartPresets ships a wpml-config.xml that names every key, so a translation plugin can pick it up.
WPML needs the String Translation add-on as well as WPML core. Checked against WPML 4.9.7. Core parses the config block, but the class that registers and translates those keys ships with the WPML String Translation add-on. Without it the config file is read and then ignored. There’s no error or notice, so the wording stays untranslated on a store you think is set up.
Polylang reads the same file through its own WPML-config compatibility and needs no add-on.

Why String Translation only lists some of them

It lists only the ones you’ve rewritten. That’s expected. WPML builds its list from the keys that are named in the config and held in the option, and CartPresets stores only your overrides. A notice still at its shipped wording has nothing to translate there, because gettext translates it instead. The list grows as you edit, and a store that has reworded nothing sees an empty list.

For developers

cartpresets_notice_text filters one customer-facing sentence before its values are put in. It receives the wording, the notice ID, and whether this is the plural form of a pair. See the hooks reference.
Last modified on September 28, 2026