常见问题
常见问题Polylang 运行异常

Polylang 运行异常

使用 Polylang 扩展时,如果你在从公开端点通过 GraphQL 获取数据时遇到以下问题:

  • Polylang 无法正确检测 GraphQL 请求的当前语言
  • 特定语言的内容无法被正确过滤
  • 返回了错误语言的内容,或完全没有内容返回

……并且你在 Gato GraphQL 中执行过以下任一操作:

  • 更新了 GraphQL Single Endpoint 的路径
  • 更新了 Custom Endpoints 或 Persisted Queries 的基础 slug
  • 禁用了某个端点(通过禁用对应的模块)

……那么你必须通过 hook 应用相同的修改,以避免冲突。

为何会发生此问题

Polylang 的初始化与 Gato GraphQL 的服务容器设置之间存在时序冲突。

Polylang 在其初始化过程中设置 pll_modelpll_context 过滤器。由于 Gato GraphQL 尚未完成初始化,它无法从数据库中获取正确的端点路径,因此无法判断请求是否来自 GraphQL 端点,也无法将模型和上下文替换为正确的值(分别为 PLL_Admin_ModelPLL_Admin)。

解决方案

当 Polylang 设置 pll_modelpll_context 过滤器时,Gato GraphQL 会假定 GraphQL 端点使用默认路径。

因此,如果你通过插件设置修改了任意公开端点的路径,则必须通过 hook 应用相同的修改。

请参阅指南 通过 hook 复制 GraphQL 端点路径更新 以获取解决方案。