The Commerce fieldtype is registered by the Commerce plugin on the fieldtype shelf. It marks how an entry (or variant sub-entry) is sold.
Commerce v2 stores fulfillment (ship, deliver, register, gift_card, none), optional tax_class / tax_included, ship weight_grams / dims, and one or more purchase_options (one-time and/or recurring prices) on each sellable entry. Optional quantity_available and sku support capacity and fulfillment. Variants use a variants sub-collection with a Commerce field on each sub-entry.
Schema (v2 stored value)
| Field | Type | Notes |
|---|---|---|
fulfillment | enum | ship, deliver, register, gift_card, none |
tax_class | string | standard, reduced, zero, or custom. Default standard. Rates from Settings → Tax |
tax_included | bool | Default true (EU): shelf price includes tax. false = tax excluded and added at checkout |
weight_grams | int | null | Required on ship when EasyPost live rates are enabled |
length_mm / width_mm / height_mm | int | null | Optional parcel dims for live rates |
purchase_options[] | array | id, label, billing, price_cents, currency, interval? |
quantity_available | int | null | Catalog projection of Inventory Available; capacity for register; null = unlimited |
sku | string | null | Fulfillment/import; defaults to entry slug |
Example:
{
"fulfillment": "register",
"tax_class": "standard",
"tax_included": true,
"purchase_options": [
{ "id": "ticket", "label": "Workshop ticket", "billing": "one_time", "price_cents": 2500, "currency": "eur" }
],
"quantity_available": 20
}
Fulfillment panels
| Value | Editor extras | Checkout |
|---|---|---|
ship | Weight (grams); optional L×W×H mm | Shipping address; live rates need weight |
deliver | Asset URL/file | Download token after pay |
register | Uses quantity | Attendee name |
gift_card | Face value = purchase option price | Email only; issues codes on pay |
none | — | Purchase mappings / membership |
Collection schema may include commerce_settings to preset enabled fulfillments and billing intervals. Fieldtype profiles under Commerce → Fieldtypes can restrict enabled fulfillments (including a gift-card-only profile).
What is NOT on the fieldtype
- Discount amounts — Commerce Discounts (promotions)
- Affiliate codes —
?ref=+ rule engine - Tier grants — Settings → Mappings
- Stock ledger rows — Inventory (modes: Unlimited · Simple · Locations)
- Tax rates / providers — Settings → Tax (field picks
tax_class+ included/excluded mode) - Shipping rate provider — Settings → Shipping (field supplies weight/dims for quotes)
Catalog index
One indexed row per sellable unit (variant sub-entry if variants exist, else parent). Cart/checkout read from catalog_index.json. For countable SKUs, Inventory is the ledger system of record; Catalog stores projected availability.
Legacy migration
P6.4 values (price_cents + billing only) migrate to a single purchase_option with inferred fulfillment (default ship).