Shopify Liquid contains 判断字符串和数组时结果不对
现象#
用 contains 判断标签或选项时,明明有值却返回 false;数组里判断对象也永远不命中。
原因#
contains对字符串是子串匹配,对数组是元素全等匹配,两种语义容易混淆- 数组里存的是对象(如
product.tags是字符串,variant.options是数组),比较对象永远不相等 - 比较前没做
downcase,大小写不同导致匹配失败 - 变量本身是
nil,contains直接返回 false 而不报错
处理步骤#
- 字符串匹配统一
{{ tag | downcase }}与'sale'比较 - 数组包含判断用
{% if product.tags contains 'sale' %},不要对对象数组做 contains - 需要判断对象数组时改用
map提取字段再判断:{% if variants | map: 'id' contains vid %} - 调试时先
{{ value | json }}看真实类型
验收标准#
标签、选项、变体三种场景下的判断结果与后台数据一致,不再出现「有值判不到」。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。