Membership Metaobjects
The membership system allows you to create and manage tiered membership programs with various benefits. Each membership can have multiple benefits attached to it, such as free shipping, special cashback rates, referral bonuses, free products, and tier-reached bonuses.
Accessing Memberships
To access membership data in your liquid templates, use the following code:
_10{%- assign membership = shop.metaobjects.app--60169453569--membership.v2 -%}_10{% if membership %}_10<p>{{ membership.name }}</p>_10{% endif %}
Membership Fields
Field Name | Type | Description |
---|---|---|
name | Text | Name of the membership tier |
memberr_id | Text | Internal memberr identifier |
is_active | Boolean | Whether this membership tier is currently active |
revenue_threshold | Money | Revenue amount required to qualify for this tier |
qualification_period_days | Integer | Number of days over which the revenue threshold is calculated |
membership_duration_days | Integer | How long the membership remains valid once earned |
is_locked | Boolean | When true, the membership tier won't change until expiration, even if customer qualifies for a different tier |
is_manual | Boolean | When true, this membership can only be assigned manually, not through automatic qualification |
benefit_free_shipping | Reference | Link to free shipping benefit configuration |
benefit_referral_override | Reference | Link to referral program overrides |
benefit_cashback_override | Reference | Link to cashback program overrides |
benefit_free_products | Reference | Link to free products benefit |
benefit_tier_reached_bonus | Reference | Link to tier reached bonus configuration |
Membership Types
Manual vs. Automatic Assignment
Memberships can be configured for either manual or automatic assignment:
- When
is_manual
istrue
, the membership can only be assigned by an administrator - When
is_manual
isfalse
, customers can automatically qualify based on therevenue_threshold
andqualification_period_days
Locked vs. Dynamic Tiers
The is_locked
field controls tier change behavior:
- When
is_locked
istrue
, the membership tier remains fixed until expiration, regardless of customer qualification for other tiers - When
is_locked
isfalse
, the membership tier can change if the customer qualifies for a different tier
Example of checking membership type:
_11{% if membership %}_11 {% if membership.is_manual %}_11 <p>This is an exclusive membership tier, available by invitation only.</p>_11 {% else %}_11 <p>Qualify by spending {{ membership.revenue_threshold.value | money }} within {{ membership.qualification_period_days }} days.</p>_11 {% endif %}_11_11 {% if membership.is_locked %}_11 <p>Your tier is locked until {% if membership.membership_duration_days %}{{ membership.membership_duration_days }} days from activation{% else %}expiration{% endif %}.</p>_11 {% endif %}_11{% endif %}
Membership Benefits
Free Shipping Benefit
_10{%- assign free_shipping = membership.benefit_free_shipping -%}_10{% if free_shipping %}_10 {% if free_shipping.is_active %}_10 <p>Free shipping is available on qualifying orders!</p>_10 {% endif %}_10{% endif %}
Field Name | Type | Description |
---|---|---|
membership_id | Text | Associated membership ID |
is_active | Boolean | Whether free shipping is active |
discount_id | Text | Internal reference ID (not for display) |
Cashback Override
_10{%- assign cashback = membership.benefit_cashback_override -%}_10{% if cashback %}_10 {% if cashback.is_active %}_10 <p>Special cashback rate: {{ cashback.cashback_percentage }}%</p>_10 <p>Available after {{ cashback.credit_availability_delay_days }} days</p>_10 <p>Expires in {{ cashback.credit_expiry_days }} days</p>_10 {% endif %}_10{% endif %}
Field Name | Type | Description |
---|---|---|
membership_id | Text | Associated membership ID |
is_active | Boolean | Whether the override is active |
cashback_percentage | Decimal | Special cashback percentage for this tier |
credit_expiry_days | Integer | Days until cashback credit expires |
credit_availability_delay_days | Integer | Days before cashback becomes available |
Referral Override
_19{%- assign referral = membership.benefit_referral_override -%}_19{% if referral %}_19 {% if referral.is_active %}_19 {% if referral.referring_customer_gets_type == 'PERCENTAGE' %}_19 <p>Referrer gets: {{ referral.referring_customer_gets_value_percentage }}%</p>_19 {% else %}_19 <p>Referrer gets: {{ referral.referring_customer_gets_value_money.value | money }}</p>_19 {% endif %}_19 _19 {% case referral.referred_customer_gets_type %}_19 {% when 'PERCENTAGE' %}_19 <p>New customer gets: {{ referral.referred_customer_gets_value_percentage }}% off</p>_19 {% when 'FIXED' %}_19 <p>New customer gets: {{ referral.referred_customer_gets_value_money.value | money }} off</p>_19 {% when 'FREE_SHIPPING' %}_19 <p>New customer gets: Free Shipping</p>_19 {% endcase %}_19 {% endif %}_19{% endif %}
Field Name | Type | Description |
---|---|---|
membership_id | Text | Associated membership ID |
is_active | Boolean | Whether the override is active |
referring_customer_gets_type | Text | Type of reward ('PERCENTAGE' or 'FIXED') |
referring_customer_gets_value_percentage | Decimal | Percentage reward for referrer |
referring_customer_gets_value_money | Money | Fixed amount reward for referrer |
referring_customer_expiry_days | Integer | Days until referrer reward expires |
referring_customer_availability_delay_days | Integer | Delay before referrer gets reward |
referred_customer_gets_type | Text | Type of reward ('PERCENTAGE', 'FIXED', or 'FREE_SHIPPING') |
referred_customer_gets_value_percentage | Decimal | Percentage reward for new customer |
referred_customer_gets_value_money | Money | Fixed amount for new customer |
referred_customer_minimum_order_value | Money | Minimum purchase required |
referred_customer_must_be_new_customer | Boolean | Whether only new customers qualify |
Free Products Benefit
_10{%- assign free_products = membership.benefit_free_products -%}_10{% if free_products %}_10 {% if free_products.is_active %}_10 <p>Choose {{ free_products.max_selectable_free_products }} free products from collection {{ free_products.collection_id }}</p>_10 <p>Minimum order: {{ free_products.minimum_order_value.value | money }}</p>_10 {% endif %}_10{% endif %}
Field Name | Type | Description |
---|---|---|
membership_id | Text | Associated membership ID |
is_active | Boolean | Whether the benefit is active |
collection_id | Reference | Collection containing free product options |
max_selectable_free_products | Integer | Number of free products allowed |
hide_cart_lines | Boolean | Whether to hide free products in cart |
minimum_order_value | Money | Minimum purchase required |
discount_id | Text | Internal reference ID (not for display) |
Tier Reached Bonus
_10{%- assign bonus = membership.benefit_tier_reached_bonus -%}_10{% if bonus %}_10 {% if bonus.is_active %}_10 <p>Tier bonus: {{ bonus.amount.value | money }}</p>_10 {% if bonus.is_one_time %}_10 <p>One-time bonus!</p>_10 {% endif %}_10 <p>Expires in {{ bonus.credit_expiry_days }} days</p>_10 {% endif %}_10{% endif %}
Field Name | Type | Description |
---|---|---|
membership_id | Text | Associated membership ID |
is_active | Boolean | Whether the bonus is active |
is_one_time | Boolean | Whether this is a one-time bonus |
amount | Money | Bonus amount |
credit_expiry_days | Integer | Days until bonus expires |
Best Practices
Always check if the membership and benefit exist before accessing:
_10{% if membership and membership.benefit_cashback_override %}_10 // Access cashback override_10{% endif %}
Remember to use .value for money fields and to format monetary values using the money filter:
_10{{ membership.revenue_threshold.value | money }}_10{{ bonus.amount.value | money }}
Handle different reward types appropriately:
_10{% if referral.referring_customer_gets_type == 'PERCENTAGE' %}_10 {{ referral.referring_customer_gets_value_percentage }}%_10{% else %}_10 {{ referral.referring_customer_gets_value_money.value | money }}_10{% endif %}
Consider qualification period when displaying thresholds:
_10<p>Spend {{ membership.revenue_threshold.value | money }} within {{ membership.qualification_period_days }} days to qualify</p>