如何用page.title在静态页面动态筛选同名标签产品?
动态筛选匹配页面标题标签的产品
问题背景
你在名为“Haarentfernung”的静态页面中,需要列出带有同名标签的产品,目前硬编码标签名可实现筛选,但尝试用page.title动态传入where过滤器时失败——不管直接写{{ page.title }}还是用单引号包裹都无法生效。
解决方案
在Liquid语法里,过滤器中引用变量不需要加{{ }},直接写变量名即可。针对产品标签的动态筛选,有两种简洁可行的写法:
方法1:循环内直接判断标签匹配
{% paginate collections.all.products by 999 %} {%- assign target_tag = page.title -%} {%- for product in collections.all.products -%} {%- if product.tags contains target_tag -%} <!-- 这里可输出产品信息,比如标题、链接等 --> <p>{{ product.title }}</p> {%- endif -%} {%- endfor %} {% endpaginate %}
方法2:先过滤产品集合再循环
如果想先筛选出所有匹配产品再处理,可直接用where过滤器针对产品的tags属性过滤:
{% paginate collections.all.products by 999 %} {%- assign target_tag = page.title -%} {%- assign filtered_products = collections.all.products | where: 'tags', target_tag -%} {%- for product in filtered_products -%} <p>{{ product.title }}</p> {%- endfor %} {% endpaginate %}
注意事项
- 大小写兼容处理:Liquid的
contains和where均为大小写敏感,如果标签与页面标题存在大小写差异,可统一转成小写后再判断:
{%- assign target_tag = page.title | downcase -%} {%- for product in collections.all.products -%} {%- if product.tags | join: ',' | downcase contains target_tag -%} <p>{{ product.title }}</p> {%- endif -%} {%- endfor %}
- 精确匹配需求:如果需要严格匹配标签(避免部分字符串匹配),优先使用
where过滤器,它会精准匹配数组中的完整元素。
内容的提问来源于stack exchange,提问作者Sebastian Wieser
相关产品推荐
相关产品推荐

