よくある問題Polylangが正常に動作しない
Polylangが正常に動作しない
Polylang拡張機能を使用しているときに、公開エンドポイントからGraphQLでデータを取得する際に以下の問題が発生する場合:
- PolylangがGraphQLリクエストの現在の言語を正しく検出しない
- 言語固有のコンテンツが正しくフィルタリングされない
- 誤った言語のコンテンツが返される、またはコンテンツがまったく返されない
...かつ、Gato GraphQLで以下のいずれかの操作を行った場合:
- GraphQL Single Endpointのパスを更新した
- Custom EndpointsまたはPersisted Queriesのベーススラッグを更新した
- エンドポイントを無効化した(対応するモジュールを無効化することによって)
...その場合は、競合を避けるために、同じ変更をフックを通じて適用する必要があります。
この問題が発生する理由
PolylangのInitializationとGato GraphQLのサービスコンテナのセットアップの間にタイミングの競合があります。
Polylangは初期化プロセス中にpll_modelおよびpll_contextフィルターを設定します。Gato GraphQLがまだ初期化されていないため、リクエストがGraphQLエンドポイントから来ているかどうかを判断し、モデルとコンテキストを正しいもの(それぞれPLL_Admin_ModelとPLL_Admin)で上書きするために、データベースから正しいエンドポイントパスを取得できません。
回避策
Polylangがpll_modelおよびpll_contextフィルターを設定する際、Gato GraphQLはGraphQLエンドポイントのデフォルトパスを想定します。
そのため、プラグインの設定から公開エンドポイントのパスを変更した場合は、同じ変更をフックを通じて適用する必要があります。
解決策については、ガイドフックを通じたGraphQLエンドポイントパスの更新の複製をご覧ください。