Skip to main content
Every sentence and label a customer reads is editable, under Settings → Cart notices and labels. There are nineteen, in four groups. Leave one blank and the shipped wording is used — so you only ever store what you actually changed, and a release that improves a default reaches you automatically.

Refusals

Eight messages for a link that could not be followed.
Write not_found for a stranger. Anyone can guess a URL, and the shipped wording deliberately does not say whether the preset ever existed. It also cannot be switched off — an empty override falls back to the default — so it has to be safe in front of anyone.

Partial adds

Four messages for a link that worked with a caveat.

Later, in the cart

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

Labels

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

Placeholders

Four messages contain a placeholder that carries a value: These are checked when you save, in both directions:
  • Dropping one leaves a sentence that reads as a typo — “limited to purchases per customer”.
  • Adding one would break the cart page in front of a customer.
Either is refused with the offending row named, so you cannot save a message that would fail later.

The one plural

limit_customer is the only message whose grammar changes with the number, so it is stored as a pair — singular and plural. Each falls back on its own, so rewriting only the plural gives you 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, leaving this one at its default is genuinely better than rewriting it. The default path keeps proper plural handling in every locale; an override has exactly two forms in any language.

Translating

Two halves, and they translate differently. Wording you have not touched goes through WordPress’s normal translation functions and is in the .pot file like everything else. Nothing special is needed. Wording you have rewritten is a value in an option, and an option value is data rather than a translatable string. CartPresets ships a wpml-config.xml naming every key so a translation plugin can pick it up.
WPML needs String Translation, not just WPML core. Verified 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 — no error, no notice, just untranslated wording on a store that believes it 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 the ones you have actually rewritten, and that is correct rather than a gap. WPML builds its list by intersecting the keys named in the config against the keys the option currently holds — and CartPresets stores only your overrides. A notice still at its shipped wording has nothing to translate there because it is translated through gettext instead. So the list grows as you edit. A store that has reworded nothing sees nothing.

For developers

cartpresets_notice_text filters one customer-facing sentence before its values are put in, receiving the wording, the notice ID, and whether this is the plural form of a pair. See the hooks reference.