Skip to main content
Order lines created by a preset carry these meta keys. The names will not change, within a major version or across one — they are the stable integration surface for packing slips, shipping labels, fulfilment and accounting.

Always present

Why the name is snapshotted

Renaming a preset next year must not rewrite what last year’s orders say they were. An order is a historical record, and reading the name live would silently rewrite history every time you tidied up a title. The ID stays live, so you can still find the preset. The two together let you say “this was bought as Summer Kit, which is now called Seasonal Bundle”.

Why the instance ID is there

Two copies of the same preset in one order are two sets of lines with the same preset ID. The instance ID is what separates them — without it you cannot tell a customer who bought one preset with quantity 2 from one who bought it twice.

Custom items that ship

Present only on shippable custom item lines.

Why they exist

Reading a line back calls $order_item->get_product(), which re-fetches the real carrier product — generic, virtual and weightless. The clone that carried the actual weight existed for one cart calculation and was never persisted. Without this snapshot, a packing-slip or shipping-label plugin reading a custom preset item gets nothing usable: a 2kg item reads as 0kg because the product it points at genuinely weighs nothing.

The values are raw

Numbers and a term ID. No unit strings, no formatting. A consuming integration needs the value, not a pre-formatted display string — and the units are your store’s own, readable from WooCommerce settings.

Reading them

Grouping an order by preset instance

Adding your own

Additive only. Append keys; the plugin’s own are re-applied afterwards. Prefix yours with your own namespace so the two sets never collide.

They survive uninstall

Order line meta is never removed, whatever you switch on under Data control. It is part of your order history, and an order that recorded which preset it came from should keep recording it after the plugin is gone. Deleting it would damage records you may be legally required to keep.

The report reads these

The Presets report joins WooCommerce’s own lookup tables against _cartpresets_preset_id. That is the whole mechanism — the meta is stamped at checkout for reasons unrelated to reporting, and reporting is a consumer of it like any other integration. It also means an integration needing sales figures on both tiers can do exactly what the report does, without the report.