You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jekyll中where过滤器失效问题求助

解决Jekyll中where过滤器处理数组字段的问题

我懂你现在的困扰——当colleague_role是数组类型时,直接用where过滤器匹配字符串肯定行不通,因为Jekyll的where是严格的精确匹配规则,数组和字符串属于不同类型,自然匹配不上。下面给你两个可行的解决方案:

方法一:用where_exp自定义匹配条件(推荐)

where_exp允许你编写自定义的Liquid表达式,刚好能用来检查数组是否包含目标值,把代码改成这样就行:

{% for post in site.help | where_exp: "item", "item.colleague_role contains 'All colleagues'" %}
  <li><a href="{{ post.url | prepend: site.baseurl }}">{{ post.title }} {{ post.colleague_role }}</a></li>
{% endfor %}

这里的contains操作符对数组生效时,会自动检查数组里是否存在"All colleagues"这个元素,完美适配你的场景,就算以后colleague_role里需要添加多个角色,这个写法也能正常工作。

方法二:直接取数组第一个元素匹配(仅适用于单元素数组)

看你的例子里colleague_role都是只有一个元素的数组,那也可以直接定位数组的第一个元素来匹配,代码如下:

{% for post in site.help | where:"colleague_role[0]","All colleagues" %}
  <li><a href="{{ post.url | prepend: site.baseurl }}">{{ post.title }} {{ post.colleague_role }}</a></li>
{% endfor %}

不过这个方法有局限性,如果以后你的文章里colleague_role需要添加多个角色,这个写法就会失效,所以更推荐第一种方法。

另外再提醒你:要确保前置元数据的YAML格式是正确的,colleague_role的数组写法必须是colleague_role: - All colleagues(短横线后面一定要有空格),不然Jekyll可能会把它识别成字符串而不是数组,过滤器也会因此出问题。

内容的提问来源于stack exchange,提问作者Matt Tyas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:59:18