Shopify render 与 include 变量隔离的区别
现象#
把旧主题的 include 'price' 改成 render 'price' 后,价格片段里的 product 变成空,页面只剩一个货币符号。
原因#
- render 创建独立作用域,外层 assign 出来的变量不会自动传进片段
- include 与主模板共享作用域,旧写法实际上依赖了隐式可见的变量
- render 只接受显式传参,with、for 或 key: value 三种形式
- 片段内部也用 assign 写变量,迁移后没有任何地方接收这个值
处理步骤#
- 在调用处显式传参:
{% render 'price', product: product, show_compare: true %} - 片段内直接用传入的名字读取,如
{{ product.price | money }} - 批量循环时用
{% render 'product-card' for collection.products as card %} - 需要的多个值逐个传,或打包成一个对象传入,不要靠 include 兜底
- 全主题搜索残留的
{% include %},逐个改写并回归页面
验收标准#
商品卡与详情页价格正常显示,片段内输出 product.title 有值;页面不再出现孤立的货币符号。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。