Files
gh-henkisdabro-wookstar-cla…/skills/shopify-liquid/references/objects.md
2025-11-29 18:32:51 +08:00

696 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Liquid Objects - Complete Reference
## Global Objects (Available Everywhere)
### shop
Store-level information:
```liquid
{{ shop.name }} {# Store name #}
{{ shop.url }} {# Store URL (https://...) #}
{{ shop.description }} {# Store tagline/description #}
{{ shop.currency }} {# ISO currency code: USD, GBP, EUR #}
{{ shop.money_format }} {# Money format string: ${{amount}} #}
{{ shop.permanent_domain }} {# Domain: store.myshopify.com #}
{{ shop.domain }} {# Primary domain #}
{{ shop.email }} {# Support email #}
{{ shop.phone }} {# Support phone #}
{{ shop.address }} {# Store address object #}
{{ shop.address.city }}
{{ shop.address.province }}
{{ shop.address.country }}
{{ shop.address.zip }}
{{ shop.enabled_payment_types }} {# Array of enabled payment methods #}
{{ shop.checkout.privacy_policy_url }}
{{ shop.checkout.terms_of_service_url }}
{{ shop.checkout.refund_policy_url }}
```
### request
Request context and routing:
```liquid
{{ request.path }} {# Current URL path: /products/handle #}
{{ request.host }} {# Current domain #}
{{ request.origin }} {# Protocol + host #}
{{ request.page_type }} {# "product", "collection", "index", etc. #}
{{ request.locale.iso_code }} {# Language: "en", "fr", "es" #}
{{ request.locale.root_url }} {# Root URL for locale #}
{{ request.design_mode }} {# Boolean: theme editor active #}
{{ request.visual_preview_mode }} {# Boolean: theme preview active #}
{# Query parameters #}
{{ request.query_string }} {# Full query string #}
{# Build canonical URL #}
{{ request.canonical_url }} {# Full canonical URL #}
{{ request.path_with_query }} {# Path + query string #}
```
### settings
Theme settings (from settings_schema.json):
```liquid
{# Colors #}
{{ settings.color_primary }}
{{ settings.color_secondary }}
{{ settings.color_body_bg }}
{# Typography #}
{{ settings.type_header_font }}
{{ settings.type_body_font }}
{# Layout #}
{{ settings.layout_container_width }}
{{ settings.layout_sidebar_enabled }}
{# Media #}
{{ settings.logo }} {# Image object #}
{{ settings.logo.src }}
{{ settings.logo.width }}
{{ settings.logo.height }}
{{ settings.logo.alt }}
{# Text content #}
{{ settings.announcement_text }}
{{ settings.footer_text }}
{# Boolean settings #}
{% if settings.show_breadcrumbs %}
{# Render breadcrumbs #}
{% endif %}
{# URL settings #}
{{ settings.social_twitter_link }}
{{ settings.social_facebook_link }}
```
### routes
URL routes to standard pages:
```liquid
{{ routes.root_url }} {# / #}
{{ routes.account_url }} {# /account #}
{{ routes.account_login_url }} {# /account/login #}
{{ routes.account_logout_url }} {# /account/logout #}
{{ routes.account_register_url }} {# /account/register #}
{{ routes.account_addresses_url }} {# /account/addresses #}
{{ routes.collections_url }} {# /collections #}
{{ routes.all_products_collection_url }} {# /collections/all #}
{{ routes.search_url }} {# /search #}
{{ routes.cart_url }} {# /cart #}
{{ routes.cart_add_url }} {# /cart/add #}
{{ routes.cart_change_url }} {# /cart/change #}
{{ routes.cart_clear_url }} {# /cart/clear #}
{{ routes.cart_update_url }} {# /cart/update #}
```
### section
Current section context (within sections):
```liquid
{{ section.id }} {# Unique ID: "section-1234567890" #}
{{ section.settings.title }} {# Section setting #}
{{ section.settings.background_color }}
{{ section.index }} {# Position on page #}
{{ section.location }} {# Where section appears #}
{# Blocks #}
{{ section.blocks }} {# Array of blocks #}
{{ section.blocks.size }} {# Number of blocks #}
{% for block in section.blocks %}
{{ block.id }}
{{ block.type }}
{{ block.settings.text }}
{{ block.shopify_attributes }} {# Required for theme editor #}
{% endfor %}
{# Blocks by type #}
{{ section.blocks_by_type }} {# Organized by type #}
```
### block
Current block context (within section blocks):
```liquid
{{ block.id }} {# Unique ID: "block-9876543210" #}
{{ block.type }} {# Block type name #}
{{ block.settings.text }} {# Block setting #}
{{ block.shopify_attributes }} {# Required for theme editor #}
{# Example usage in section #}
{% for block in section.blocks %}
<div {{ block.shopify_attributes }}>
{% case block.type %}
{% when 'heading' %}
<h2>{{ block.settings.title }}</h2>
{% when 'text' %}
<p>{{ block.settings.content }}</p>
{% endcase %}
</div>
{% endfor %}
```
## Page Context Objects
### product
Product object (on product pages):
```liquid
{# Core properties #}
{{ product.id }} {# Numeric ID #}
{{ product.title }} {# Product name #}
{{ product.handle }} {# URL slug #}
{{ product.description }} {# Full HTML description #}
{{ product.vendor }} {# Brand/manufacturer #}
{{ product.type }} {# Category #}
{{ product.url }} {# Product URL #}
{{ product.available }} {# Boolean: any variant in stock #}
{{ product.published_at }} {# Publication timestamp #}
{{ product.created_at }} {# Creation timestamp #}
{{ product.updated_at }} {# Last modified timestamp #}
{# Pricing (in cents) #}
{{ product.price }} {# Current variant price #}
{{ product.price_min }} {# Cheapest variant #}
{{ product.price_max }} {# Most expensive variant #}
{{ product.price_varies }} {# Boolean: different prices #}
{{ product.compare_at_price }} {# Original price for sales #}
{{ product.compare_at_price_min }}
{{ product.compare_at_price_max }}
{{ product.compare_at_price_varies }}
{# Images #}
{{ product.featured_image }} {# Primary image object #}
{{ product.featured_image.src }}
{{ product.featured_image.width }}
{{ product.featured_image.height }}
{{ product.featured_image.alt }}
{{ product.featured_image | img_url: '500x500' }}
{{ product.images }} {# Array of all images #}
{{ product.images.size }} {# Image count #}
{% for image in product.images %}
<img src="{{ image | img_url: '300x300' }}" alt="{{ image.alt }}">
{% endfor %}
{{ product.media }} {# Array of all media (images, videos, 3D) #}
{# Variants #}
{{ product.variants }} {# Array of variants #}
{{ product.variants.size }} {# Variant count #}
{{ product.selected_variant }} {# Currently selected variant #}
{{ product.selected_or_first_available_variant }}
{{ product.first_available_variant }}
{{ product.has_only_default_variant }} {# Boolean: single variant #}
{# Options #}
{{ product.options }} {# Array: ["Size", "Color"] #}
{{ product.options_with_values }} {# Array of option objects #}
{% for option in product.options_with_values %}
<label>{{ option.name }}</label>
<select>
{% for value in option.values %}
<option>{{ value }}</option>
{% endfor %}
</select>
{% endfor %}
{# Collections #}
{{ product.collections }} {# Array of collections #}
{{ product.collections.size }}
{# Tags #}
{{ product.tags }} {# Array of tags #}
{{ product.tags | join: ", " }}
{# Custom data #}
{{ product.metafields.namespace.key }}
{{ product.metafields.custom.field_name }}
{# Template #}
{{ product.template_suffix }} {# Template variant: "alternate" #}
```
### variant
Variant object (product.variants, product.selected_variant):
```liquid
{{ variant.id }} {# Variant ID #}
{{ variant.product_id }} {# Parent product ID #}
{{ variant.title }} {# "Red / Medium" #}
{{ variant.price }} {# Price in cents #}
{{ variant.compare_at_price }} {# Original price #}
{{ variant.sku }} {# SKU code #}
{{ variant.barcode }} {# Barcode #}
{{ variant.weight }} {# Weight in grams #}
{{ variant.weight_unit }} {# "kg", "lb", etc. #}
{{ variant.weight_in_unit }} {# Weight in configured unit #}
{# Availability #}
{{ variant.available }} {# Boolean: in stock #}
{{ variant.inventory_quantity }} {# Current stock level #}
{{ variant.inventory_policy }} {# "continue" or "deny" #}
{{ variant.inventory_management }} {# "shopify" or null #}
{# Options #}
{{ variant.option1 }} {# First option value: "Red" #}
{{ variant.option2 }} {# Second option value: "Medium" #}
{{ variant.option3 }} {# Third option value #}
{{ variant.options }} {# Array: ["Red", "Medium"] #}
{# Image #}
{{ variant.featured_image }} {# Variant-specific image #}
{{ variant.image }} {# Same as featured_image #}
{# URL #}
{{ variant.url }} {# Product URL with variant param #}
{# Metafields #}
{{ variant.metafields.namespace.key }}
```
### collection
Collection object (on collection pages):
```liquid
{# Core properties #}
{{ collection.id }} {# Numeric ID #}
{{ collection.title }} {# Collection name #}
{{ collection.handle }} {# URL slug #}
{{ collection.description }} {# HTML description #}
{{ collection.url }} {# Collection URL #}
{{ collection.published_at }} {# Publication date #}
{# Image #}
{{ collection.image }} {# Featured image object #}
{{ collection.image.src }}
{{ collection.image | img_url: '1024x1024' }}
{# Products #}
{{ collection.products }} {# Array of products #}
{{ collection.products_count }} {# Current page count #}
{{ collection.all_products_count }}{# Total count #}
{# Filtering & sorting #}
{{ collection.all_tags }} {# All tags (max 1000) #}
{{ collection.all_types }} {# All product types #}
{{ collection.all_vendors }} {# All vendors #}
{{ collection.current_type }} {# Active type filter #}
{{ collection.current_vendor }} {# Active vendor filter #}
{{ collection.sort_by }} {# Current sort method #}
{{ collection.default_sort_by }} {# Default sort #}
{{ collection.sort_options }} {# Available sort methods #}
{# Filters (Storefront Filtering) #}
{{ collection.filters }} {# Array of filter objects #}
{% for filter in collection.filters %}
{{ filter.label }} {# Filter name #}
{{ filter.type }} {# "list", "price_range" #}
{{ filter.active_values }} {# Currently active #}
{{ filter.values }} {# Available values #}
{% endfor %}
{# Navigation (on product pages within collection) #}
{{ collection.next_product }} {# Next product in collection #}
{{ collection.previous_product }} {# Previous product #}
{# Metafields #}
{{ collection.metafields.namespace.key }}
{# Template #}
{{ collection.template_suffix }}
```
### cart
Cart object (global - always available):
```liquid
{# Cart state #}
{{ cart.item_count }} {# Total line items #}
{{ cart.total_price }} {# Total in cents #}
{{ cart.total_weight }} {# Weight sum #}
{{ cart.empty? }} {# Boolean: is cart empty #}
{# Items #}
{{ cart.items }} {# Array of line items #}
{{ cart.items.size }} {# Number of line items #}
{% for item in cart.items %}
{{ item.product_id }}
{{ item.variant_id }}
{{ item.title }}
{{ item.quantity }}
{{ item.price }}
{{ item.line_price }} {# price × quantity #}
{{ item.image }}
{% endfor %}
{# Notes and attributes #}
{{ cart.note }} {# Customer note #}
{{ cart.attributes }} {# Custom cart attributes #}
{# Access specific attribute #}
{% if cart.attributes.gift_wrap %}
Gift wrap requested
{% endif %}
{# Discounts #}
{{ cart.cart_level_discount_applications }}
{{ cart.total_discount }} {# Total discount amount #}
{# Checkout #}
{{ cart.requires_shipping }} {# Boolean #}
```
### line_item
Line item object (cart.items):
```liquid
{% for item in cart.items %}
{{ item.id }} {# Line item ID #}
{{ item.key }} {# Unique key #}
{{ item.product_id }} {# Product ID #}
{{ item.variant_id }} {# Variant ID #}
{# Product info #}
{{ item.product }} {# Product object #}
{{ item.variant }} {# Variant object #}
{{ item.title }} {# Product title #}
{{ item.product_title }} {# Same as title #}
{{ item.variant_title }} {# Variant options #}
{# Pricing #}
{{ item.quantity }} {# Quantity ordered #}
{{ item.price }} {# Price per unit (cents) #}
{{ item.line_price }} {# Total: price × quantity #}
{{ item.original_price }} {# Before discounts #}
{{ item.original_line_price }}
{{ item.final_price }} {# After discounts #}
{{ item.final_line_price }}
{# Images #}
{{ item.image }} {# Line item image #}
{{ item.featured_image.src }}
{# URL #}
{{ item.url }} {# Link to product #}
{# SKU #}
{{ item.sku }} {# Variant SKU #}
{# Properties (custom line item data) #}
{{ item.properties }} {# Hash of properties #}
{% for property in item.properties %}
{{ property.first }}: {{ property.last }}
{% endfor %}
{# Discounts #}
{{ item.discount_allocations }}
{% for discount in item.discount_allocations %}
{{ discount.amount }}
{{ discount.discount_application.title }}
{% endfor %}
{# Fulfillment #}
{{ item.requires_shipping }} {# Boolean #}
{{ item.taxable }} {# Boolean #}
{% endfor %}
```
### customer
Customer object (when logged in):
```liquid
{% if customer %}
{{ customer.id }} {# Numeric ID #}
{{ customer.email }} {# Email address #}
{{ customer.first_name }}
{{ customer.last_name }}
{{ customer.name }} {# Full name #}
{{ customer.phone }}
{# Account status #}
{{ customer.has_account }} {# Boolean: registered #}
{{ customer.accepts_marketing }} {# Email marketing opt-in #}
{{ customer.email_marketing_consent }}
{# Addresses #}
{{ customer.addresses }} {# Array of addresses #}
{{ customer.addresses_count }}
{{ customer.default_address }} {# Primary address #}
{% for address in customer.addresses %}
{{ address.first_name }}
{{ address.last_name }}
{{ address.address1 }}
{{ address.address2 }}
{{ address.city }}
{{ address.province }}
{{ address.province_code }} {# State/region code #}
{{ address.country }}
{{ address.country_code }} {# Country code: US, CA, etc. #}
{{ address.zip }}
{{ address.phone }}
{{ address.company }}
{% endfor %}
{# Orders #}
{{ customer.orders }} {# Array of orders #}
{{ customer.orders_count }} {# Total orders #}
{{ customer.total_spent }} {# Lifetime value (cents) #}
{# Tags #}
{{ customer.tags }} {# Array of customer tags #}
{# Metafields #}
{{ customer.metafields.namespace.key }}
{% endif %}
```
### order
Order object (order confirmation, customer account):
```liquid
{{ order.id }} {# Numeric ID #}
{{ order.name }} {# Order name: "#1001" #}
{{ order.order_number }} {# 1001 #}
{{ order.confirmation_number }} {# Unique confirmation #}
{{ order.email }} {# Customer email #}
{{ order.phone }} {# Customer phone #}
{{ order.customer_url }} {# Link to view order #}
{# Timestamps #}
{{ order.created_at }} {# Order date/time #}
{{ order.updated_at }}
{{ order.cancelled_at }} {# If cancelled #}
{{ order.processed_at }}
{# Customer #}
{{ order.customer }} {# Customer object #}
{{ order.customer.name }}
{# Items #}
{{ order.line_items }} {# Array of line items #}
{{ order.line_items_count }}
{% for item in order.line_items %}
{{ item.title }}
{{ item.quantity }}
{{ item.price }}
{{ item.line_price }}
{% endfor %}
{# Pricing #}
{{ order.subtotal_price }} {# Before tax/shipping #}
{{ order.total_price }} {# Grand total #}
{{ order.tax_price }} {# Total tax #}
{{ order.shipping_price }} {# Shipping cost #}
{{ order.total_discounts }} {# Discount amount #}
{# Status #}
{{ order.financial_status }} {# "paid", "pending", "refunded" #}
{{ order.fulfillment_status }} {# "fulfilled", "partial", null #}
{{ order.cancelled }} {# Boolean #}
{{ order.cancel_reason }}
{# Addresses #}
{{ order.shipping_address }}
{{ order.billing_address }}
{# Shipping #}
{{ order.shipping_method.title }} {# Shipping method name #}
{{ order.shipping_method.price }}
{# Discounts #}
{{ order.discount_applications }}
{% for discount in order.discount_applications %}
{{ discount.title }}
{{ discount.total_allocated_amount }}
{% endfor %}
{# Notes #}
{{ order.note }} {# Customer note #}
{{ order.attributes }} {# Custom attributes #}
{# Tags #}
{{ order.tags }}
```
### article
Article object (blog post pages):
```liquid
{{ article.id }} {# Numeric ID #}
{{ article.title }} {# Article headline #}
{{ article.handle }} {# URL slug #}
{{ article.content }} {# Full HTML content #}
{{ article.excerpt }} {# Summary/teaser #}
{{ article.excerpt_or_content }} {# Excerpt if set, else content #}
{# Author #}
{{ article.author }} {# Author name #}
{{ article.author_url }} {# Author profile URL #}
{# Dates #}
{{ article.published_at }} {# Publication date #}
{{ article.created_at }}
{{ article.updated_at }}
{# URL #}
{{ article.url }} {# Article URL #}
{# Image #}
{{ article.image }} {# Featured image #}
{{ article.image.src }}
{{ article.image | img_url: 'large' }}
{# Comments #}
{{ article.comments }} {# Array of comments #}
{{ article.comments_count }}
{{ article.comments_enabled }} {# Boolean #}
{{ article.moderated }} {# Comment moderation enabled #}
{# Tags #}
{{ article.tags }} {# Array of tags #}
{# Blog reference #}
{{ article.blog }} {# Parent blog object #}
{{ article.blog.title }}
{# Metafields #}
{{ article.metafields.namespace.key }}
```
### blog
Blog object (blog listing page):
```liquid
{{ blog.id }} {# Numeric ID #}
{{ blog.title }} {# Blog name #}
{{ blog.handle }} {# URL slug #}
{{ blog.url }} {# Blog URL #}
{# Articles #}
{{ blog.articles }} {# Array of articles #}
{{ blog.articles_count }} {# Total articles #}
{# Tags #}
{{ blog.all_tags }} {# All article tags #}
{# Metafields #}
{{ blog.metafields.namespace.key }}
```
### search
Search results object:
```liquid
{{ search.performed }} {# Boolean: search executed #}
{{ search.results }} {# Results array #}
{{ search.results_count }} {# Number of results #}
{{ search.terms }} {# Search query #}
{{ search.types }} {# Resource types found #}
{% for item in search.results %}
{% case item.object_type %}
{% when 'product' %}
{{ item.title }}
{{ item.price | money }}
{% when 'article' %}
{{ item.title }}
{{ item.excerpt }}
{% when 'page' %}
{{ item.title }}
{{ item.content | strip_html | truncatewords: 50 }}
{% endcase %}
{% endfor %}
```
## Metafields
Access custom data on any object:
```liquid
{# Product metafields #}
{{ product.metafields.namespace.key }}
{{ product.metafields.custom.warranty_info }}
{{ product.metafields.specifications.material }}
{# Collection metafields #}
{{ collection.metafields.seo.custom_title }}
{# Customer metafields #}
{{ customer.metafields.loyalty.points }}
{# Shop metafields #}
{{ shop.metafields.global.announcement }}
{# Check for existence #}
{% if product.metafields.custom.size_guide %}
{{ product.metafields.custom.size_guide }}
{% endif %}
{# Use default filter for safety #}
{{ product.metafields.custom.field | default: "Not specified" }}
```
## Metaobjects
Access metaobject definitions:
```liquid
{# Access metaobject by handle #}
{% assign testimonial = shop.metaobjects.testimonials['customer-review-1'] %}
{{ testimonial.name }}
{{ testimonial.rating }}
{{ testimonial.content }}
{# Loop through metaobjects #}
{% for testimonial in shop.metaobjects.testimonials.values %}
{{ testimonial.fields.author }}
{{ testimonial.fields.quote }}
{% endfor %}
```