如何在产品WYSIWYG编辑器中调用Liquid变量标签?
问题解答:Liquid变量在产品WYSIWYG编辑器中不生效的原因与解决办法
首先直接给结论:是的,默认情况下Liquid变量/标签仅能在主题的Liquid模板文件(.liquid后缀)中生效,产品编辑器(WYSIWYG)里的产品描述属于静态存储的内容,Shopify不会自动解析其中的Liquid语法——这就是你遇到问题的核心原因。
为什么会这样?
Shopify的页面渲染流程是这样的:
当用户访问页面时,服务器首先解析主题的Liquid模板文件,执行所有Liquid标签、变量运算,生成基础HTML结构;之后再把存储在数据库里的产品描述、页面内容等静态文本插入到这个HTML结构中。这个阶段已经没有Liquid解析步骤了,所以你在产品描述里写的
{{ favorite_food }}会被当成纯文本直接显示,而不会被替换成变量值。
解决办法:用模板层替换实现动态内容
既然产品描述本身不支持Liquid解析,我们可以换个思路:在产品模板Liquid文件里处理变量,然后把产品描述里的占位符替换成变量值。下面是两种常用方案:
方案1:针对全局变量(所有产品共用同一个值)
比如你在主题文件里定义的{% assign favorite_food = 'apples' %}是全局的,所有产品都用这个值:
- 在产品编辑器的WYSIWYG里,把原来的
My favorite food is {{ favorite_food }}.改成带占位符的文本,比如:My favorite food is [FAVORITE_FOOD]. - 找到主题里负责输出产品描述的Liquid文件(通常是
product.liquid或者sections/product-template.liquid),找到输出产品描述的代码行(一般是{{ product.description }}),修改成:
{% assign favorite_food = 'apples' %} {{ product.description | replace: '[FAVORITE_FOOD]', favorite_food }}
这样,当模板渲染时,会自动把产品描述里的[FAVORITE_FOOD]替换成变量favorite_food的值。
方案2:针对单个产品的动态值(每个产品可以自定义)
如果每个产品的“favorite food”不一样,可以用**元字段(Metafields)**来实现:
- 给每个产品添加一个自定义元字段(比如命名为
custom.favorite_food),填入对应的值(比如“apples”“bananas”等) - 在产品编辑器的WYSIWYG里,同样用占位符:
My favorite food is [FAVORITE_FOOD]. - 修改产品模板里的描述输出代码为:
{{ product.description | replace: '[FAVORITE_FOOD]', product.metafields.custom.favorite_food.value }}
这样每个产品的描述里都会显示自己元字段对应的内容。
额外优化:用主题设置让非技术人员也能修改
如果这个全局变量需要经常修改,不想每次改代码,可以在主题设置里添加一个自定义文本字段:
- 进入主题的“编辑代码”,找到
settings_schema.json,添加一个文本输入项(具体语法可参考Shopify内置的主题设置示例) - 在产品模板里调用
settings.favorite_food来替换占位符,这样商家在主题设置里就能直接修改值,不用碰代码。
注意事项
- 不要在产品描述里直接写Liquid标签,它们会被当成纯文本显示,比如
{{ favorite_food }}会直接出现在页面上,而不是变量值。 - 占位符可以自定义,只要和模板里的
replace参数对应上就行,比如用{{FAVORITE_FOOD}}或者__FAVORITE_FOOD__都可以,避免和其他文本冲突。
内容的提问来源于stack exchange,提问作者Axion
相关产品推荐
相关产品推荐

