常见问题Polylang 运行异常
Polylang 运行异常
使用 Polylang 扩展时,如果你在从公开端点通过 GraphQL 获取数据时遇到以下问题:
- Polylang 无法正确检测 GraphQL 请求的当前语言
- 特定语言的内容无法被正确过滤
- 返回了错误语言的内容,或完全没有内容返回
……并且你在 Gato GraphQL 中执行过以下任一操作:
- 更新了 GraphQL Single Endpoint 的路径
- 更新了 Custom Endpoints 或 Persisted Queries 的基础 slug
- 禁用了某个端点(通过禁用对应的模块)
……那么你必须通过 hook 应用相同的修改,以避免冲突。
为何会发生此问题
Polylang 的初始化与 Gato GraphQL 的服务容器设置之间存在时序冲突。
Polylang 在其初始化过程中设置 pll_model 和 pll_context 过滤器。由于 Gato GraphQL 尚未完成初始化,它无法从数据库中获取正确的端点路径,因此无法判断请求是否来自 GraphQL 端点,也无法将模型和上下文替换为正确的值(分别为 PLL_Admin_Model 和 PLL_Admin)。
解决方案
当 Polylang 设置 pll_model 和 pll_context 过滤器时,Gato GraphQL 会假定 GraphQL 端点使用默认路径。
因此,如果你通过插件设置修改了任意公开端点的路径,则必须通过 hook 应用相同的修改。
请参阅指南 通过 hook 复制 GraphQL 端点路径更新 以获取解决方案。