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

React中使用WPGraphQL获取排除当前文章的相关文章

回答

WPGraphQL原生支持该需求,无需额外修改后端接口逻辑,只需要给posts字段添加查询过滤参数即可。

你当前的查询没有传入过滤规则,会返回指定分类下的全部文章,包含当前正在浏览的文章。只需要在posts字段的where参数中添加notIn规则,传入要排除的当前文章ID,接口返回时就会自动过滤掉对应文章。

可用查询示例

推荐用变量传参,不要硬编码ID值,方便在不同文章页复用:

query GetRelatedPosts($categoryId: Int!, $currentPostId: Int!) {
  category(idType: DATABASE_ID, id: $categoryId) {
    posts(
      first: 10 # 按需设置返回的相关文章数量
      where: {
        notIn: [$currentPostId] # 排除当前文章
        orderby: { field: DATE, order: DESC } # 按发布时间倒序,可按需修改排序规则
      }
    ) {
      edges {
        node {
          id
          title
          # 可按需追加摘要、特色图、链接等需要的字段
        }
      }
    }
  }
}

参数说明

  • $categoryId:当前文章所属分类的数据库ID,和你原有查询中传入的分类ID逻辑一致
  • $currentPostId:当前浏览文章的数字类型数据库ID,WPGraphQL识别到notIn参数后,会自动映射为WordPress原生WP_Query的post__not_in规则完成过滤,不需要额外处理。

扩展场景

如果当前文章同时归属多个分类,你可以直接从posts根入口查询,传入多个分类ID获取跨分类的相关文章,排除逻辑完全一致:

query GetMultiCategoryRelatedPosts($categoryIds: [Int!]!, $currentPostId: Int!) {
  posts(
    first: 10
    where: {
      categoryIn: $categoryIds
      notIn: [$currentPostId]
      orderby: { field: DATE, order: DESC }
    }
  ) {
    edges {
      node {
        id
        title
      }
    }
  }
}

注意:notIn参数仅接受纯数字格式的WordPress数据库ID,如果你拿到的是WPGraphQL返回的编码后全局Relay ID(类似cG9zdDoxMjM=格式的长字符串),需要先解码提取出数字ID再传入,否则过滤规则不会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:36:20