Shopify 报错排障

Liquid 报 String 与 0 比较失败怎么修

现象#

集合页按价格区间筛选时整个商品列表消失,源码里留下 Liquid error (snippets/filter line 27): comparison of String with 0 failed。

原因#

  • 比较两边类型不一致,一边是从 URL 参数或 metafield 读到的文本,一边是数字
  • request.params 里的值永远是字符串,直接与 0 比较在 Liquid 中会抛类型错误
  • metafield 用 single_line_text_field 存数字,读出来是文本而非整数
  • 主题对空值写了 default: 0,但 default 只替换 nil,不会转换已有值的类型

处理步骤#

  1. 用 {{ request.params.min | json }} 打印,看输出带不带引号
  2. 显式转换:{% assign min = request.params.min | plus: 0 %}
  3. metafield 改用 number_integer 类型,或在模板里补 | times: 1
  4. 比较前判空:{% if min != blank and product.price >= min %}
  5. 把区间判断集中到一处 assign,避免同一逻辑在多处各写一份

验收标准#

带 ?min=100 访问集合页时列表正常渲染,源码不再出现 comparison of String with 0 failed,价格正好 100 的商品保留在结果里。

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