gatsby-source-wordpress插件异常:WP分类返回undefined及Gatsby中WPGraphQL查询分类无内容问题求助
我来帮你排查这个棘手的问题,结合你描述的现象——GraphQL调试界面能查到数据,但项目里渲染空元素,大概率是数据同步、查询结构或者字段访问的问题,试试下面这些方案:
先清缓存重新同步数据
Gatsby的静态生成依赖本地缓存,有时候调试界面的最新数据和项目缓存里的旧数据不一致。先运行:gatsby clean然后重新启动开发服务
gatsby develop,让Gatsby重新从WordPress拉取完整数据,避免缓存导致的数据缺失。注意分类nodes是数组,不是单个对象!
这很可能是你渲染空元素的核心原因:categories.nodes是一个数组(因为一篇文章可以关联多个分类),你直接写data.wpPost.categories.nodes.id相当于在数组上取id属性,自然会返回undefined。正确的做法是遍历数组或者取单个元素:
比如取第一个分类:<p>{data.wpPost.categories.nodes[0]?.id}</p>或者遍历所有分类渲染:
{data.wpPost.categories.nodes.map(category => ( <p key={category.id}>{category.id} | {category.name}</p> ))}用可选链
?.还能避免数组为空时抛出错误。检查WPGraphQL的字段权限和配置
确认WordPress端的WPGraphQL插件有没有限制分类字段的访问权限。比如某些自定义设置可能会把分类的核心字段(id、name等)设为私有,虽然调试界面能查到(因为你是后台管理员权限),但Gatsby同步数据时用的是匿名或低权限请求,拿不到这些字段。去WordPress后台的WPGraphQL设置里,确保分类的相关字段是公开可查询的。核对Gatsby查询的完整性
确保你在项目里写的GraphQL查询和调试界面里的完全一致,没有漏字段或者结构错误。比如完整的查询应该包含所有需要的分类字段:query MyQuery { wpPost(title: { regex: "/Works/" }) { categories { nodes { id name slug } } } }有时候不小心漏写字段,Gatsby就不会把对应数据存入静态缓存,自然渲染空内容。
查看Gatsby开发日志找线索
启动gatsby develop时,留意终端输出的日志,有没有关于WordPress数据同步的警告或错误,比如“字段无法解析”“API请求失败”之类的信息,这些日志能直接帮你定位问题根源。
内容的提问来源于stack exchange,提问作者inzn

