Ghost 博客中的相关 Posts - 不包括当前 Post

Related Posts In Ghost Blog - Excluding Current Post

我正在使用 Ghost 作为博客平台。当用户阅读 post 时,我想显示一些相关的 post。

{{#foreach tags limit="1"}}
    {{#get "posts" filter="tags:{{slug}}" limit="6" include="author,tags" as |article|}}
        {{#foreach article}}
          ....
        {{/foreach}}
    {{/get}}
{{/foreach}}

我设法获得了相关 post,但我在从结果中删除当前 post 时遇到了问题。

根据 Ghost 文档,我应该可以使用过滤器的这个附加项:

"+id:-{{post.id}}"

像这样:

{{#get "posts" filter="tags:{{slug}}+id:-{{post.id}}" limit="6" include="author,tags" as |article|}}

不幸的是,这不起作用,{{post.id}} 甚至没有打印出任何内容,无论我在哪个范围内。只需使用 {{id}} 而不是 {{post.id }} 我得到一个值,但它是标签 ID,所以这是不正确的。

我设法通过这种方式在标签范围内访问了我的 post ID {{../id}} 但我无法通过这种方式在过滤器中使用它,它也不起作用。

任何关于如何解决它的想法将不胜感激。

我认为 {{id}} 可以。刚刚尝试了这个,它通过删除当前 post 的 id 但保留其他的 id 来工作:

{{#get "posts" limit="all" filter="id:-{{id}}"}}
    {{#foreach posts}}
        {{id}}
    {{/foreach}}
{{/get}}

但必须在您的 {{#post}} 范围内。

我使用 jQuery 实现了我所需要的。

首先我得到当前 post id 调用我的函数,获取那个 post 的标签。

  function getCurrentPosts(id) {
$.get(ghost.url.api('posts', {filter: 'id:' + id, include: 'tags'})).done(function (data){
      var tags = data.posts[0].tags;
      getRelatedPosts(id, tags)

}).fail(function (err){
    console.log(err);
  });
}

然后我得到所有具有相同标签但与我当前的 post id 不同的 posts。

function getRelatedPosts(id, tags) {
tags = tags.map(function(obj){ 
   return  obj.slug ;
}).join(', ');

tags = '[' + tags + ']';

$.get(ghost.url.api('posts', {filter: 'id:-' + id + ' +tags:' + tags, include: "author, tags" })).done(function (data){
      var posts = data.posts;
      console.log(posts.length)
      if (posts.length > 0) {
        showRelatedPosts(posts);
      }
      else{
        $('.related-section').hide();
      }
}).fail(function (err){
     console.log(err);
  });
}