Files
2025-11-29 18:32:51 +08:00

21 KiB
Raw Permalink Blame History

Liquid Objects - Complete Reference

Global Objects (Available Everywhere)

shop

Store-level information:

{{ 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:

{{ 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):

{# 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:

{{ 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):

{{ 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):

{{ 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):

{# 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):

{{ 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):

{# 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):

{# 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):

{% 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):

{% 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):

{{ 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):

{{ 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):

{{ 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 results object:

{{ 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:

{# 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:

{# 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 %}