Shopify Liquid 进阶教程:高级语法与自定义 Section 开发 封面图

Shopify Liquid 进阶教程:高级语法与自定义 Section 开发

摘要

想突破主题的限制?掌握 Liquid 让你随心所欲改代码!拆解高级语法、动态数据过滤与性能优化,分步骤带你开发专属的自定义模块。

先判断问题出现在哪里

不懂 Liquid,你只能受限于主题的死板框架。掌握 Liquid,你能直接调用 Shopify 数据库里的任何字段,把静态页面变成千人千面的动态营销机器。

实战步骤

步骤 1:开发带倒计时的自定义促销 Section

Shopify Liquid 进阶教程:高级语法与自定义 Section 开发:步骤 1:开发带倒计时的自定义促销 Section
真实页面参考:Shopify 性能优化官方文档。对照本步骤确认当前官方路径和关键概念,实际操作以你的店铺后台、本地终端或代码仓库为准。
Shopify Liquid 进阶教程:高级语法与自定义 Section 开发:步骤 3:使用 paginate 标签优化海量数据加载
真实页面参考:Shopify 性能优化官方文档。对照本步骤确认当前官方路径和关键概念,实际操作以你的店铺后台、本地终端或代码仓库为准。

不要花每个月 $19 去买倒计时插件,自己写一个 Section,速度快 10 倍且完全免费。

操作路径Shopify后台 -> 在线商店 -> 主题 -> 编辑代码 -> sections -> 添加新 section (命名为 custom-promo-banner.liquid)

{% # 1. 定义 Schema 让商家可以在后台配置 %}
{% schema %}
{
  "name": "促销倒计时横幅",
  "settings": [
    {
      "type": "text",
      "id": "promo_text",
      "label": "促销文案",
      "default": "Flash Sale! 20% OFF ends in:"
    },
    {
      "type": "text",
      "id": "end_date",
      "label": "结束时间 (格式: YYYY-MM-DD HH:MM)",
      "default": "2026-12-31 23:59"
    }
  ],
  "presets": [{"name": "促销倒计时横幅"}]
}
{% endschema %}

{% # 2. 渲染 HTML 结构 %}
<div class="custom-promo-banner" style="background: #ef4444; color: white; text-align: center; padding: 10px;">
  <span>{{ section.settings.promo_text }}</span>
  <strong id="countdown-timer-{{ section.id }}" data-end="{{ section.settings.end_date }}"></strong>
</div>

{% # 3. 注入倒计时 JS 逻辑 %}
<script>
  document.addEventListener("DOMContentLoaded", function() {
    const timerEl = document.getElementById('countdown-timer-{{ section.id }}');
    const endDate = new Date(timerEl.getAttribute('data-end')).getTime();
    
    const x = setInterval(function() {
      const now = new Date().getTime();
      const distance = endDate - now;
      if (distance < 0) {
        clearInterval(x);
        timerEl.innerHTML = "EXPIRED";
        return;
      }
      const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
      const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
      const seconds = Math.floor((distance % (1000 * 60)) / 1000);
      timerEl.innerHTML = hours + "h " + minutes + "m " + seconds + "s ";
    }, 1000);
  });
</script>

步骤 2:利用 Liquid 过滤器 (Filters) 动态处理数据

Shopify Liquid 进阶教程:高级语法与自定义 Section 开发:步骤 2:利用 Liquid 过滤器 (Filters) 动态处理数据
真实页面参考:Shopify 性能优化官方文档。对照本步骤确认当前官方路径和关键概念,实际操作以你的店铺后台、本地终端或代码仓库为准。

不要在后台手动算折扣价,让系统自动算。

操作路径在 product.liquid 或 product-card.liquid 中使用

{% # 计算并显示动态折扣百分比 %}
{% if product.compare_at_price > product.price %}
  {% assign discount_amount = product.compare_at_price | minus: product.price %}
  {% assign discount_percent = discount_amount | times: 100.0 | divided_by: product.compare_at_price | round %}
  
  <span class="badge-sale" style="background: red; color: white;">
    Save {{ discount_percent }}% ({{ discount_amount | money }})
  </span>
{% endif %}

步骤 3:使用 paginate 标签优化海量数据加载

如果一个集合有 500 个产品,一次性加载会让页面直接卡死。

操作路径在 collection.liquid 中使用分页

{% # 严格限制每页只加载 24 个产品 %}
{% paginate collection.products by 24 %}
  <div class="product-grid">
    {% for product in collection.products %}
      {% render 'product-card', product: product %}
    {% endfor %}
  </div>
  
  {% # 渲染底部分页按钮 %}
  {% if paginate.pages > 1 %}
    {{ paginate | default_pagination }}
  {% endif %}
{% endpaginate %}

常见误区与处理方法

误区一:在 for 循环中滥用 assign 导致内存溢出

在遍历 1000 个订单或客户数据时,在循环内部大量定义新变量(assign),会导致 Shopify 服务器渲染超时(Liquid Error: Memory limits exceeded),页面直接白屏报错。

规避方法:尽量在循环外部定义好变量。如果必须在循环内过滤数据,优先使用 where 过滤器直接在数组层面筛选,而不是用 for + if 逐个判断。例如:{% assign available_products = collection.products | where: "available", true %}

误区二:直接修改主题核心文件,导致无法升级

为了加个小功能,直接在 theme.liquidglobal.js 里乱改一通。半年后主题出了修复安全漏洞的新版本,你一升级,所有自定义代码全部被覆盖清空。

规避方法绝对不要直接修改主题自带的核心文件! 必须使用 自定义 SectionSnippets(代码片段),或者在后台主题编辑器中通过 Custom CSS / Custom Liquid 区块 注入代码。这样即使主题升级,你的自定义模块也能无损迁移。

常见问题

Liquid 进阶多久能看到效果?

SEO 和 GEO 通常不是当天见效的工作。更合理的做法是先保证页面结构、标题、内链和内容深度正确,再按 4 到 8 周观察收录、曝光和自然点击变化。

文章里要不要堆关键词?

不要。标题、首段、小标题和 FAQ 里自然覆盖用户真实问题即可。重复堆词会降低可读性,也不利于 AI 摘要准确理解页面。

Liquid 进阶应该先看哪个核心指标?

先看能直接影响决策的指标,不要只看曝光或访问量。新手可以把转化率、获客成本、客单价、复购或退款情况放在同一张表里,每周复盘一次。

做Liquid 进阶前需要准备什么?

先确认目标、当前数据、页面或后台路径,再准备一份改动记录。这样出现波动时能追溯原因,也方便后续把有效动作沉淀成 SOP。

Liquid 进阶多久复盘一次比较合适?

运营类动作建议每周小复盘、每月大复盘;广告或转化测试不要因为单日波动频繁改动,至少等到有足够样本后再判断。

新手最容易踩的坑是什么?

最常见的问题是同时改太多变量,最后不知道是哪一步带来结果。每次只改一个关键点,保留截图、数据和发布时间,后续才有可复用的经验。

下一步阅读

0 条评论

发表评论

请注意,评论必须在发布之前获得批准。

分享这篇文章

阅读说明

这些文章更适合当作排查笔记,而不是万能模板。

这篇文章适合怎么读?

先看结论和步骤,再对照自己的网站情况判断是否适用。涉及代码或后台设置的部分,建议先在预览主题或测试环境里试。

可以直接照着改吗?

有些步骤可以直接参考,有些要看主题结构、App、页面内容和当前业务阶段。不要在正式主题上直接试,先备份或用预览主题验证。

代码片段需要注意什么?

不同主题的 section、snippet 和 CSS 结构不一样。复制代码前先确认文件位置和命名,改完后检查桌面端、移动端和购物流程。

后续还会补充吗?

会。内容会围绕建站流程、主题代码、页面优化、速度排查和工具实测慢慢补,不追热点,优先写实际遇到的问题。

我的情况和文章不一样怎么办?

可以先把网站链接、页面现象和你已经尝试过的操作记下来,再决定是继续自查,还是发来让我帮你判断问题类型。

继续看 Shopify 实操笔记

如果这篇文章解决了一部分问题,可以回到博客列表继续看相关笔记;如果情况不一样,再带着页面和现象来判断。

返回博客列表 发来问题