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,不会转换已有值的类型
处理步骤#
- 用
{{ request.params.min | json }}打印,看输出带不带引号 - 显式转换:
{% assign min = request.params.min | plus: 0 %} - metafield 改用
number_integer类型,或在模板里补| times: 1 - 比较前判空:
{% if min != blank and product.price >= min %} - 把区间判断集中到一处 assign,避免同一逻辑在多处各写一份
验收标准#
带 ?min=100 访问集合页时列表正常渲染,源码不再出现 comparison of String with 0 failed,价格正好 100 的商品保留在结果里。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。