如何在 Ghost 中找到所有带有特定标签的帖子并遍历它们?

How to find all the posts with a specific tag in Ghost and iterate over them?

我目前正在开发 Ghost 博客(Ghost 是基于 Node.js 和该平台上其他各种 packages/libraries 的 Wordpress "successor"),但我想知道我如何能够在 Ghost/Handlebars.js.

中获取所有具有特定标签的帖子

问题是 Ghost 的上下文通常被封装到这样的程度,以至于我无法从 API 中提取带有特定标签的所有帖子的列表;显然只能遍历来自 index.hbs 的帖子,而其他解决方案有点 hacker-y 或更多地使用 jQuery.

我怎样才能获得 Ghost 中所有帖子的列表或数组,以便我可以按标签过滤它们,然后遍历它们?我什至尝试了 {{#foreach posts}}{{#has tag='WHATEVER'}},但这种方法似乎开箱即用。作为 Ghost 和 Handlebars 的新手,我不确定该怎么做。

注意:此答案在撰写本文时是正确的。 {{#get}} 助手于 2015 年 11 月添加,自 Ghost 1.0(2017 年 8 月)以来默认可用。它记录在这里:https://themes.ghost.org/docs/get

David 的答案现在应该是被接受的答案。


目前无法列出所有标签,如路线图上的 theme documentation FAQ. This also references the get helper 功能所述,将来可以实现。

当前版本的 Ghost 的一个有点 hacky 的可能性是使用 JavaScript 获取 RSS 提要的页面并循环遍历每个页面,从每个 post 抓取标签。这将起作用,但值得记住的是,RSS 提要的分页将在未来版本中消失(在 API 完全可用后,因此会有迁移路径)。

一旦 get 助手被释放,这将成为一个简单的助手:{{#get 'tags'}}...do things with tags here...{{/get}}。此功能正在积极开发中。

万一有人遇到这个问题,现在可以了。以下是您可以通过 get 帮助程序执行此操作的方法:

{{#get "posts" filter="tags:tagname"}}
    {{#foreach posts}}
         <p>{{title}}</p>
    {{/foreach}}
{{/get}}

{{#get "posts" filter="tags:[tag1, tag2]"}}
    {{#foreach posts}}
         <p>{{title}}</p>
    {{/foreach}}
{{/get}}