使用Polylang实现多语言时,Gatsby从WordPress GraphQL按语言筛选查询返回Null问题
解决Gatsby + Headless WordPress + Polylang查询返回Null的问题
嘿,我之前也碰到过几乎一模一样的问题,这确实需要在Gatsby仓库里做一些额外配置,才能让Polylang的多语言数据正常被拉取和查询。下面是几个你需要逐一检查和调整的关键点:
1. 配置gatsby-source-wordpress启用Polylang支持
这是最核心的一步——你得在gatsby-config.js的WordPress源插件配置里,明确开启Polylang的支持,否则Gatsby不会识别多语言相关的字段。修改你的配置如下:
module.exports = { plugins: [ { resolve: `gatsby-source-wordpress`, options: { // 替换成你的WordPress GraphQL地址 url: `https://your-wp-site.com/graphql`, // 启用Polylang多语言支持 polylang: { enabled: true, // 可选:指定默认语言,比如'en' // defaultLanguage: 'en' }, // 保留你已有的其他配置(比如useGatsbyImage、schema相关设置) }, }, // 其他Gatsby插件... ], };
2. 调整查询中的语言代码格式
注意你查询里用了大写的EN,但Polylang在GraphQL中返回的语言代码通常是小写字符串(比如en、fr),Gatsby的Schema会严格匹配这个格式。把查询改成这样试试:
query MyQuery { allWpPage(filter: {language: {code: {eq: "en"}}}) { nodes { slug } } }
3. 清理Gatsby缓存并重启开发服务
有时候Gatsby会缓存旧的Schema数据,导致新添加的Polylang字段没有被加载。运行以下命令重置缓存:
gatsby clean
然后重新启动开发服务器:
gatsby develop
4. 确认WordPress端的插件设置
最后再检查一下WordPress后台的WP GraphQL Polylang插件设置,确保已经勾选了暴露多语言字段到GraphQL的相关选项(比如“Expose language fields for content types”),这样语言相关的字段才能被Gatsby正确抓取到。
按照这几步操作后,你应该就能在Gatsby的GraphQL Playground里正常查询到对应语言的页面数据了。
内容的提问来源于stack exchange,提问作者jakmas
相关产品推荐
相关产品推荐

