Di 09 Dasar Liquid > Objects kita belajar kalau object itu ada tiga jenis akses: global, per template, dan lewat object induk. Bab ini bahas yang global, alias yang bisa dipanggil dari file Liquid manapun tanpa syarat.
Object global itu fondasi: shop buat info toko, request buat tau halaman apa yang lagi dibuka, routes buat bikin URL, settings buat baca pengaturan theme. Hampir semua file Liquid yang kamu tulis bakal nyentuh minimal satu dari ini.
Catatan: cart dan customer juga global, tapi karena besar dan saling berkaitan, mereka dibahas terpisah di 16 Objects Cart, Checkout, Order, dan Customer.
shop
Informasi soal toko: alamat, jumlah produk, mata uang, kebijakan, dan berbagai pengaturan. Ini object yang paling sering dipakai di layout buat <title>, meta tag, dan footer.
Propertinya:
name, nama toko.description, deskripsi toko (buat meta description).email, email pengirim toko.phone, nomor telepon toko.address, alamat toko, berupa objectaddress(dibahas di bawah).domain, domain utama toko.permanent_domain, domain.myshopify.com-nya. Ini yang gak pernah berubah walaupun merchant ganti domain utama.url, URL lengkap toko.secure_url, URL lengkap denganhttps.id, ID toko.currency, mata uang toko, berupa string kode ISO kayaIDR.enabled_currencies, array objectcurrencyyang diterima toko.money_format, format uang toko.money_with_currency_format, format uang dengan kode mata uang.enabled_payment_types, jenis pembayaran yang diterima, berdasarkan provider yang aktif dan region pelanggan. Bisa dijadiin logo SVG pakai filterpayment_type_svg_tag.accepts_gift_cards,truekalau toko nerima gift card.customer_accounts_enabled,truekalau toko nampilin link login.customer_accounts_optional,truekalau akun pelanggan opsional buat checkout.products_count, jumlah produk di toko.collections_count, jumlah koleksi.types, semua tipe produk di toko.vendors, semua vendor produk di toko.published_locales, arrayshop_localebahasa yang dipublikasikan.policies, array objectpolicysemua kebijakan toko.privacy_policy,refund_policy,shipping_policy,subscription_policy,terms_of_service, masing-masing satu objectpolicy.brand, aset brand toko (logo, warna, slogan), berupa objectbrand.metafields, metafield yang dipasang di toko.password_message, pesan di halaman password.search_types, tipe sumber daya yang dicari secara default (["article", "page", "product"]), bisa diatur di app Search & Discovery.
Contoh nampilin semua kebijakan:
<ul>
{%- for policy in shop.policies %}
<li>{{ policy.title }}</li>
{%- endfor %}
</ul>Hasilnya:
<ul>
<li>Refund policy</li>
<li>Privacy policy</li>
<li>Terms of service</li>
<li>Shipping policy</li>
</ul>Contoh nampilin semua vendor sebagai link:
{% for vendor in shop.vendors %}
{{- vendor | link_to_vendor }}
{% endfor %}Dua properti yang udah deprecated: shop.enabled_locales (diganti shop.published_locales) dan shop.locale (diganti request.locale, karena bahasa itu urusan permintaan, bukan properti toko).
❌ deprecated
{{ shop.locale.iso_code }}✅ benar
{{ request.locale.iso_code }}1. policy
Satu kebijakan toko. Propertinya: title, body (isi HTML-nya), id, dan url (URL relatif kaya /policies/refund-policy).
2. brand, brand_colors, brand_color
shop.brand berisi aset brand yang diatur merchant di Shopify admin:
logo, logo default, berupa objectimage.square_logo, logo persegi.cover_image, gambar sampul.favicon_url, logo persegi yang diperkecil 32x32 px.slogan, slogan brand.short_description, deskripsi singkat.colors, objectbrand_colorsyang punya arrayprimarydansecondary.metafields, link sosial media, diakses pakaishop.brand.metafields.social_links.<platform>.value. Platformnya:facebook,pinterest,instagram,tiktok,tumblr,snapchat,vimeo, plustwitterdanyoutube.
Buat ngakses warna brand, kamu sebut grupnya (primary atau secondary), indeksnya (mulai dari 0), dan perannya (background atau foreground):
{{ shop.brand.colors.primary[0].background }}
{{ shop.brand.colors.primary[0].foreground }}
{{ shop.brand.colors.secondary[0].background }}Hasilnya kode warna hex kaya #0b101f. Ini berguna buat theme yang mau otomatis ngikutin warna brand merchant tanpa merchant harus ngatur ulang di theme editor.
3. address
Object alamat, dipakai di shop.address, alamat pelanggan, dan alamat pengiriman order. Propertinya: address1, address2, city, province, province_code, zip, country (object country), country_code, company, first_name, last_name, name (gabungan nama), phone, street (gabungan baris 1 dan 2), summary (ringkasan lengkap), id, dan url (cuma buat alamat pelanggan).
Buat nampilin alamat sesuai format negaranya, pakai filter format_address yang dibahas di 20 Filters Money, Metafield, Cart, Customer, dan Localization.
request
Informasi soal URL yang lagi diminta dan halaman yang terkait. Ini object yang kamu pakai buat tau di mana kamu berada:
page_type, jenis halaman yang diminta. Nilainya salah satu dari:404,article,blog,captcha,cart,collection,list-collections,customers/account,customers/activate_account,customers/addresses,customers/login,customers/order,customers/register,customers/reset_password,gift_card,index,metaobject,page,password,policy,product,search.path, path dari URL-nya, misalnya/collections/potions. Kalau halamannya gak ada,nil.host, domain yang ngehost permintaan.origin, protokol plus host, misalnyahttps://polinas-potent-potions.myshopify.com.locale, bahasa dari permintaan ini, berupa objectshop_locale.design_mode,truekalau lagi dibuka di theme editor. Udah dibahas di 06 Theme Editor dan Code Editor > Integrasi Theme dengan Theme Editor. Jangan dipakai buat ngubah tampilan, cuma buat urusan di balik layar.visual_preview_mode,truekalau lagi dibuka di visual section preview theme editor (preview kecil waktu milih section). Berguna buat nyopot skrip yang ngeganggu tampilan preview itu.
Contoh bikin URL absolut dari URL relatif:
{{ product.selected_variant.url | default: product.url | prepend: request.origin }}Hasilnya:
https://polinas-potent-potions.myshopify.com/products/health-potionIni kepakai buat og:url, canonical, atau link yang harus lengkap.
template
Informasi soal template yang lagi dipakai:
name, jenis template. Nilainya miriprequest.page_type:404,article,blog,cart,collection,list-collections,customers/*,gift_card,index,page,password,product,search.suffix, nama kustom kalau lagi pakai alternate template. Kalau pakai template default,nil. Bahasannya di 23 Templates.directory, nama folder induk template.nilkalau langsung di/templates.
Bedanya template.name sama request.page_type? Hampir sama, tapi request.page_type punya nilai tambahan kaya captcha, metaobject, dan policy. Buat ngecek “ini halaman apa”, dua-duanya jalan. Contoh yang udah kita lihat di 12 Tags Khusus Theme > break di Luar Loop:
{%- if template.name == 'index' -%}
{%- break -%}
{%- endif -%}Kalau kamu bikin alternate template product.pre-order.json, maka template.name = product dan template.suffix = pre-order. Ini cara ngasih class ke <body> yang sering dipakai:
<body class="template-{{ template.name }}{% if template.suffix %} template-{{ template.name }}-{{ template.suffix }}{% endif %}">routes
Ngasilin URL standar toko. Selalu pakai ini daripada nulis URL manual, karena:
- Toko dengan banyak bahasa punya URL berawalan kode bahasa (
/fr/cart), danroutesotomatis nyesuaiin. - Kalau Shopify ngubah format URL, theme-mu tetap jalan.
Propertinya:
root_url, halaman depan.cart_url, halaman keranjang.cart_add_url,cart_change_url,cart_update_url,cart_clear_url, endpoint Cart API buat JavaScript. Bahasannya di 51 Ajax API dan Section Rendering API.collections_url, halaman daftar koleksi.all_products_collection_url, koleksi “semua produk” yang otomatis dibikin Shopify (/collections/all).search_url, halaman pencarian.predictive_search_url, endpoint Predictive Search API.product_recommendations_url, endpoint Product Recommendations API.account_url, halaman akun.account_login_url,account_logout_url,account_register_url,account_recover_url,account_addresses_url, halaman-halaman akun.account_profile_url, halaman profil di customer accounts baru.storefront_login_url, login customer accounts baru yang balik ke halaman sebelumnya.
Kebanyakan URL akun otomatis dialihkan ke customer accounts baru kalau merchant nyalain fitur itu.
❌ salah, rusak di toko multi bahasa dan kalau format URL berubah
<a href="/cart">Keranjang</a>✅ benar
<a href="{{ routes.cart_url }}">Keranjang</a>Theme Check punya aturan HardcodedRoutes yang bakal ngingetin kalau kamu nulis URL manual. Dibahas di 66 Theme Check Referensi Aturan A–L.
settings
Akses ke semua pengaturan theme dari file config/settings_schema.json. Tiap setting diakses pakai id-nya:
{% if settings.favicon != blank %}
<link rel="icon" type="image/png" href="{{ settings.favicon | image_url: width: 32, height: 32 }}">
{% endif %}Ingat aturan dari 09 Dasar Liquid > Truthy dan Falsy: setting yang kosong itu bisa berupa nil, string kosong, atau empty, jadi selalu cek pakai blank sebelum dipakai. Semua tipe setting dan nilai balikannya dibahas di 30 Settings dan Input Settings, dan file schema-nya di 32 Config settings_schema.json, settings_data.json, markets.json.
Bedanya sama section.settings dan block.settings: settings (tanpa awalan) itu global theme, sementara section.settings itu milik section yang lagi dirender. Dua-duanya dibahas di 17 Objects Lainnya.
Object content_for
Sekelompok object yang ngisi bagian-bagian layout dengan konten yang dibikinin Shopify:
1. content_for_header
Ngasilin semua skrip yang dibutuhin Shopify: analitik, skrip app, skrip theme editor, dan lain-lain. Wajib ada di theme.liquid di antara <head> dan </head>.
Jangan pernah dimodifikasi atau di-parse isinya, karena bisa berubah kapan aja dan ngerusak perilaku toko. Theme Check punya aturan ContentForHeaderModification buat nandain ini.
❌ salah, isi content_for_header diutak-atik
{{ content_for_header | replace: 'analytics', '' }}✅ benar, dipakai apa adanya
{{ content_for_header }}2. content_for_layout
Ngasilin isi template yang lagi dirender. Wajib ada di theme.liquid di antara <body> dan </body>. Ini titik di mana template “disuntikkan” ke layout. Bahasannya di 22 Layouts.
3. content_for_index
Ngasilin isi section-section halaman depan, tapi cuma kalau kamu pakai templates/index.liquid (template Liquid lama). Di template JSON (templates/index.json), object ini gak bisa dipakai dan gak dibutuhin. Bahasannya di 24 Template per Halaman.
4. additional_checkout_buttons dan content_for_additional_checkout_buttons
Dua object yang selalu dipakai bareng buat tombol checkout dari provider pembayaran eksternal kaya PayPal Express:
additional_checkout_buttons,truekalau ada provider dengan checkout eksternal.content_for_additional_checkout_buttons, tombol-tombolnya.
{% if additional_checkout_buttons %}
{{ content_for_additional_checkout_buttons }}
{% endif %}Bahasannya di 43 Accelerated Checkout.
5. powered_by_link
Ngasilin link “Powered by Shopify” yang udah dilokalisasi sesuai bahasa toko:
{{ powered_by_link }}Hasilnya:
<a target="_blank" rel="nofollow" href="https://www.shopify.com?utm_campaign=poweredby&utm_medium=shopify&utm_source=onlinestore">Powered by Shopify</a>Object SEO dan Halaman
Sekelompok object kecil yang biasanya dipakai di <head>:
page_title, judul halaman sekarang, buat<title>dan preview media sosial.page_description, meta description halaman sekarang.page_image, gambar buat preview media sosial. Di halaman produk, koleksi, dan artikel dipakai gambar unggulannya; di halaman lain dipakai social sharing image toko. Kalau theme gak nyediain tagog:image, Shopify otomatis bikininog:image,og:image:secure_url,og:image:width, danog:image:heightdari object ini.canonical_url, URL kanonik halaman sekarang, buat<link rel="canonical">.current_page, nomor halaman sekarang di daftar yang di-paginate. Bernilai1kalau gak di-paginate.handle, handle sumber daya yang lagi dibuka. Cuma bernilai di templatearticle,blog,collection,page, danproduct. Di template lain,nil.current_tags, tag yang lagi aktif buat filter. Cuma tersedia di templateblogdancollection. Bahasannya di 37 Filtering.
Contoh judul dengan nomor halaman:
{{ page_title }}{% unless current_page == 1 %} - Page {{ current_page }}{% endunless %}Hasilnya di halaman 2:
Ingredients - Page 2Bahasan SEO lengkapnya di 48 SEO Metadata, hreflang, robots.txt.
Object Localization
Sekelompok object buat toko multi negara dan multi bahasa. Bahasan cara pakainya di 47 Markets Multi Currency, Multi Bahasa, Localization, di sini kita kenalan object-nya dulu.
1. localization
Informasi negara dan bahasa yang tersedia di toko. Dipakai di dalam form localization:
available_countries, arraycountryyang tersedia.available_languages, arrayshop_localeyang tersedia.country, negara yang lagi dipilih.language, bahasa yang lagi dipilih.market, market yang lagi dipilih.
2. country
Satu negara:
name, nama negara.iso_code, kode ISO 3166-1 alpha 2, misalnyaID.currency, mata uang negara itu, objectcurrency.continent, benuanya:Africa,Asia,Central America,Europe,North America,Oceania, atauSouth America.unit_system,metricatauimperial.available_languages, bahasa yang ditambahin ke market negara itu.market, market yang nyakup negara itu.popular?,truekalau negara ini populer buat toko ini. Berguna buat ngurutin pemilih negara. Iya, namanya beneran pakai tanda tanya.
Dua trik khusus: kalau country ditampilin langsung, yang keluar country.name, dan kalau dikasih ke filter image_url, yang keluar URL bendera negaranya (SVG rasio 4:3):
{{ localization.country | image_url: width: 32 | image_tag }}Hasilnya:
<img src="//cdn.shopify.com/static/images/flags/ca.svg?width=32" alt="Canada" srcset="//cdn.shopify.com/static/images/flags/ca.svg?width=32 32w" width="32" height="24">3. shop_locale
Satu bahasa di toko:
name, nama bahasa dalam bahasa utama toko.endonym_name, nama bahasa dalam bahasa itu sendiri (misalnya “Bahasa Indonesia”, bukan “Indonesian”).iso_code, kode IETF kayaidatauen.primary,truekalau ini bahasa utama toko.root_url, URL root buat bahasa itu, misalnya/fr.direction,ltrataurtl. Pakai buat atributdirdi<html>biar bahasa kanan-ke-kiri kaya Arab tampil benar.
Pemakaian standar di layout:
<html lang="{{ request.locale.iso_code }}" dir="{{ request.locale.direction }}">4. currency
Satu mata uang: iso_code (IDR), name (Indonesian Rupiah), dan symbol (Rp).
5. market
Satu market (kelompok region yang ditargetin merchant): handle, id, dan metafields.
6. country_option_tags dan all_country_option_tags
Dua object yang langsung ngasilin tag <option> buat tiap negara, tinggal dibungkus <select>:
country_option_tags, cuma negara yang ada di zona pengiriman toko.all_country_option_tags, semua negara.
<select name="country">
{{ country_option_tags }}
</select>Tiap <option> punya atribut data-provinces berisi array JSON provinsi negara itu, buat bikin dropdown provinsi yang berubah sesuai negara. Kepakai di form alamat pelanggan.
Koleksi Global
Sekelompok object yang ngasih akses ke semua sumber daya toko dari mana aja, diakses pakai handle sesuai aturan di 09 Dasar Liquid > Handle:
1. all_products
Semua produk di toko, diakses pakai handle:
{{ all_products['love-potion'].title }}Batasnya 20 handle unik per halaman. Kalau butuh lebih dari 20 produk, pakai koleksi. Object ini cocok buat nampilin produk tertentu yang handle-nya udah diketahui, bukan buat daftar.
2. collections
Semua koleksi di toko. Bisa di-loop atau diakses pakai handle:
{% for collection in collections %}
{{- collection.title | link_to: collection.url }}
{% endfor %}{% for product in collections['sale-potions'].products %}
{{- product.title | link_to: product.url }}
{% endfor %}Bisa di-paginate. Object collection-nya dibahas di 14 Objects Produk dan Koleksi.
3. articles dan blogs
articles itu semua artikel dari semua blog, diakses pakai handle blog diikuti handle artikel:
{% assign article = articles['potion-notions/new-potions-for-spring'] %}
{{ article.title | link_to: article.url }}blogs itu semua blog, diakses pakai handle blog:
{% for article in blogs.potion-notions.articles %}
{{- article.title | link_to: article.url }}
{% endfor %}Object blog dan article-nya dibahas di 15 Objects Konten.
4. pages
Semua halaman di toko:
{{ pages.contact.title }}
{{ pages['about-us'].title }}Bisa di-paginate, maksimal 50 per halaman:
{% paginate pages by 2 -%}
{% for page in pages -%}
{{ page.title | link_to: page.url }}
{%- endfor %}
{{- paginate | default_pagination }}
{%- endpaginate %}5. linklists
Semua menu di toko, diakses pakai handle menu. Ini yang dipakai buat bikin navigasi:
<!-- Main menu -->
{% for link in linklists.main-menu.links -%}
{{ link.title | link_to: link.url }}
{%- endfor %}
<!-- Footer menu -->
{% for link in linklists['footer'].links -%}
{{ link.title | link_to: link.url }}
{%- endfor %}Hasilnya:
<!-- Main menu -->
<a href="/" title="">Home</a>
<a href="/collections/all" title="">Catalog</a>
<a href="/pages/contact" title="">Contact</a>
<!-- Footer menu -->
<a href="/search" title="">Search</a>Object linklist dan link-nya dibahas di 15 Objects Konten, dan cara bikin navigasi lengkap di 36 Navigasi dan Menu.
6. images
Semua gambar yang di-upload ke toko (di Content > Files), diakses pakai nama file:
{{ images['potions-header.png'] | image_url: width: 300 | image_tag }}Beda sama gambar di folder assets/ theme. images itu file milik merchant, assets itu file milik theme.
7. metaobjects
Semua metaobject di toko, diakses pakai tipe dan handle-nya. Metaobject itu struktur data kustom yang dibikin merchant di Content > Metaobjects. Bahasannya di 15 Objects Konten.
closest
Object khusus buat theme block yang ngasih akses ke sumber daya terdekat dari konteks sekarang. Propertinya product, collection, article, blog, page, dan metaobject.
“Terdekat” itu dicari berurutan dari:
- Setting sumber daya di section atau theme block yang lagi dirender.
- Setting sumber daya di block induknya.
- Sumber daya dari template yang lagi dibuka.
- Yang dikirim lewat tag
content_for.
Jadi block “harga produk” yang ditaruh di section “produk unggulan” bakal dapat closest.product dari setting section itu, sementara block yang sama di halaman produk bakal dapat produk dari template-nya. Ini yang bikin theme block bisa dipakai di mana aja tanpa tau dia lagi di mana. Bahasannya di 29 Theme Blocks Mendalam.
self
Object yang mewakili scope Liquid sekarang, propertinya di-resolve secara dinamis dari variabel yang ada. Jarang dipakai langsung, lebih ke urusan internal dan alat.
Object yang Deprecated atau Mau Pensiun
1. theme
Informasi theme sekarang: id, name, dan role (main, unpublished, demo, atau development). Deprecated karena nilainya bisa berubah sewaktu-waktu jadi gak bisa diandalkan. Kalau butuh link ke theme editor theme yang tayang, pakai path /admin/themes/current/editor.
2. scripts dan script
scripts.cart_calculate_line_items ngasih Shopify Script yang aktif buat line item, berupa object script dengan id dan name. Tapi Shopify Scripts dihentikan 28 Agustus 2025, diganti Shopify Functions. Jadi kamu cuma bakal nemuin ini di theme lama.
Ringkasan
shopitu info toko: nama, domain, mata uang, kebijakan, brand, jumlah produk.shop.localedeprecated, pakairequest.locale.shop.brandngasih akses ke logo dan warna brand merchant, warnanya lewatcolors.primary[0].background.requestngasih tau posisi:page_type,path,origin,locale,design_mode.templatengasihnamedansuffixbuat tau template dan alternate template mana yang dipakai.routeswajib dipakai buat semua URL standar, jangan hardcode, biar toko multi bahasa dan perubahan format URL tetap jalan.settingsbacaconfig/settings_schema.jsonpakaiidsetting, selalu cekblanksebelum dipakai.content_for_headerdancontent_for_layoutwajib ada ditheme.liquid, dancontent_for_headergak boleh diutak-atik.content_for_indexcuma buatindex.liquidlama, gak dipakai di template JSON.page_title,page_description,page_image,canonical_urlbuat<head>dan SEO.handledancurrent_tagscuma bernilai di template tertentu.- Object localization:
localization,country,shop_locale,currency,market, pluscountry_option_tagsyang langsung ngasilin<option>. countryyang dikasih keimage_urlngasilin bendera negaranya.- Koleksi global diakses pakai handle:
all_products(maksimal 20 per halaman),collections,articles(blog/artikel),blogs,pages,linklists(menu),images(nama file),metaobjects. closestngasih sumber daya terdekat buat theme block biar block bisa dipakai di mana aja.themedeprecated,scriptsudah pensiun.
Bab selanjutnya kita masuk ke object yang paling gede dan paling sering dipakai: product dengan semua propertinya, variant, collection, image, media, dan semua object pendukungnya.