Shopify 主题与 Liquid

Shopify Liquid contains 判断字符串和数组时结果不对

现象#

用 contains 判断标签或选项时,明明有值却返回 false;数组里判断对象也永远不命中。

原因#

  • contains 对字符串是子串匹配,对数组是元素全等匹配,两种语义容易混淆
  • 数组里存的是对象(如 product.tags 是字符串,variant.options 是数组),比较对象永远不相等
  • 比较前没做 downcase,大小写不同导致匹配失败
  • 变量本身是 nil,contains 直接返回 false 而不报错

处理步骤#

  1. 字符串匹配统一 {{ tag | downcase }} 与 'sale' 比较
  2. 数组包含判断用 {% if product.tags contains 'sale' %},不要对对象数组做 contains
  3. 需要判断对象数组时改用 map 提取字段再判断:{% if variants | map: 'id' contains vid %}
  4. 调试时先 {{ value | json }} 看真实类型

验收标准#

标签、选项、变体三种场景下的判断结果与后台数据一致,不再出现「有值判不到」。

本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。