在Jekyll中使用Where Expression过滤器。
Jekyll Liquid Filter Docs
Where Expression,
选择数组中所有表达式为真的对象。
3.2.0
{{ site.members | where_exp:"item", "item.projects contains 'foo'" }}
因此,在我的网站上,我执行了以下操作:
_includes/clippings.html
...
{% capture _filter %}item.tags contains '{{ include.tag }}'{% endcapture %}
{% for clip in site.clippings | where_exp: 'item', _filter %}
{{ clip.do_stuff }}
# more html and stuff
{ endfor }
{% include clippings.html tag='foo' %}
在这种情况下,我需要动态指定过滤器标签。Clippings只是像posts一样的集合。
如果您想按多个静态标签进行过滤,可以尝试以下方法:
{% for post in site.posts | where_exp: 'item', "item.tags contains 'foo'" | where_exp: 'item', "item.tags contains 'bar'" %}
{{ post.do_stuff }}
{ endfor }
如果您想要进行多个动态筛选标签,那么您需要做类似于我上面所做的捕获操作。
我还没有测试过这个,但它应该可以通过任意数量的筛选标签来过滤帖子。
{% assign posts = site.posts %}
{% filter_tags = 'foo, bar, buzz' | slipt: ', ' %}
{% for tag in filter_tags %}
{% capture _filter %}item.tags contains '{{ tag }}'{% endcapture %}
{% assign posts = posts | where_exp: 'items', _filter %}
{% endfor %}
{% for post in posts %}
{{ post.do_stuff }}
{% endfor %}
然而,在那一点上,循环遍历整个内容并检查每个帖子可能更有效率。