Skip to main content
Product Attributes are brand-level, reusable field definitions that you can apply across all products. Unlike Custom Attributes (legacy unstructured key/value pairs), Product Attributes support rich field types, filtering, storefront visibility, and variant-level scoping.

Managing Attribute Definitions

Go to Settings → Products → Product Attributes to create, edit, and reorder attribute definitions. Each attribute definition has:
FieldDescription
NameDisplay label (e.g. “Material”, “Scent”)
SlugAuto-generated URL-safe key used in templates (e.g. material)
Field TypeSee full type list below
Applies ToWhere values are stored: Product, Variant, or Both
OptionsFor select and multiselect types: the allowed values
RequiredWhether a value must be set before saving
FilterableAvailable as a storefront/catalog filter
Visible on Product PageShown in the product page details section

Field Types

Product Attributes support the full set of CRM-style field types:
TypeInputUse Case
textSingle-line textShort values (colour name, size label)
textareaMulti-line textLonger descriptions without formatting
rich_textRich textFormatted content
wysiwygWYSIWYG editorFull rich text editing
emailEmail inputContact or support email
phonePhone inputContact number
urlURL inputProduct page, demo link
numberNumber inputWeight, volume, count
dateDate pickerRelease date, expiry date
datetimeDate & time pickerEvent datetime
booleanCheckbox (Yes/No)Organic, Vegan, In stock
selectDropdownSingle value from predefined options
multiselectCheckboxesMultiple values from predefined options
colorColor picker + textHex colour value
imageURL text inputImage URL
fileURL text inputFile URL
jsonMonospace textareaStructured JSON data

Applies To Scoping

The applies_to field controls where attribute values are stored and edited:
ValueBehaviour
productValue is stored at the product level. Edited in the Attributes tab of the Product Detail Page.
variantValue is stored per variant. Edited in the Variants tab per variant row (coming soon).
bothProduct-level default, but can be overridden per variant.

Assigning Values to Products

Open any product and go to the Attributes tab. You will see all brand-level attribute definitions that apply to the product level. Fill in values and save. Attributes with applies_to = variant are managed in the Variants tab, not the Attributes tab.

Template Access

List Definitions

{% set attrs = GetProductAttributes() %}
{% for attr in attrs %}
  {{ attr.slug }}: {{ attr.name }} ({{ attr.type }})
{% endfor %}
Filter by scope or visibility:
{% set visibleAttrs = GetProductAttributes({ visible: true, applies_to: 'product' }) %}

Get Product Values

{% set vals = GetProductAttributeValues(product) %}
{{ vals.material }}
{{ vals.scent }}

Shorthand Filters

When a product is loaded via GetProduct(), attribute values and definitions are pre-loaded:
{{ product | attr:'material' }}        — value by slug
{{ product | attrLabel:'material' }}   — display label by slug

Full Display Example

{% set attrDefs = GetProductAttributes({ visible: true }) %}
{% set attrVals = GetProductAttributeValues(product) %}
<dl>
{% for def in attrDefs %}
  {% set val = attrVals[def.slug] %}
  {% if val %}
    <dt>{{ def.name }}</dt>
    <dd>{{ val }}</dd>
  {% endif %}
{% endfor %}
</dl>

Relationship to Custom Attributes

Custom Attributes are legacy unstructured key/value pairs stored directly on the product. Product Attributes are the preferred system — typed, reusable, filterable, and scoped to product or variant level. Both systems can coexist. Custom Attributes are available under the Custom Attributes tab; Product Attributes under the Attributes tab.