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

无头WordPress中如何通过GraphQL按分类获取相关文章?

问题排查与修复方案

核心问题分析

你的过滤逻辑存在两个关键错误:

  • filter回调里用了map,map始终返回数组(哪怕是空数组,在布尔判断里也会被视为true),导致所有文章都会被保留,完全起不到过滤作用。
  • 没有排除当前文章本身,最终会把当前文章也混入相关文章列表。

另外还有个潜在问题:你只取了当前文章的第一个分类(edges[0]),如果文章属于多个分类,会丢失其他分类的匹配可能。

修复后的代码

情况1:仅匹配当前文章的第一个分类

// 获取当前文章第一个分类名称
const postCategory = post.categories.edges[0].node.name;

// 过滤同分类且排除当前文章的内容
const relatedPosts = posts.filter((currentPost) => {
  // 跳过当前文章本身
  if (currentPost.id === post.id) return false;
  // 检查当前文章是否包含目标分类
  return currentPost.categories.edges.some(edge => edge.node.name === postCategory);
});

情况2:匹配当前文章的所有分类(更合理)

如果文章属于多个分类,想要匹配其中任意一个分类的文章:

// 获取当前文章的所有分类名称
const postCategories = post.categories.edges.map(edge => edge.node.name);

// 过滤同分类且排除当前文章的内容
const relatedPosts = posts.filter((currentPost) => {
  if (currentPost.id === post.id) return false;
  // 检查当前文章是否有任意一个分类在目标列表中
  return currentPost.categories.edges.some(edge => postCategories.includes(edge.node.name));
});

额外调试建议

  • 用console.log(post.categories, posts)打印数据结构,确认edges数组不为空、字段名称(比如name、id)和你获取的一致,避免因数据层级或字段错误导致逻辑失效。
  • 优先用分类ID而非名称做匹配(GraphQL查询时可以请求node.id),ID是唯一标识,比名称更可靠,也能避免重名分类的干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:01:10