フロントエンドからの言語ごとのコンテンツのクエリ
すべてのWPGraphQLクエリにlanguage引数が追加されます。投稿、カスタム投稿タイプ、タクソノミーターム、メニュー、メニュー項目、コメントを単一のフィールドで言語ごとにフィルタリングできます。フロントエンドでのクエリ後のフィルタリング、リクエスト量の倍増、言語の推測は必要ありません。
query PostsES {
posts(where: { language: "es" }) {
nodes { slug uri title }
}
}
トップレベルのノードを言語でフィルタリングすると、接続された項目(カテゴリー、タグ、カスタムタクソノミー)も自動的に同じ言語に従います。ネストされたフィールドごとに余分な引数を追加しなくても、一貫した結果が得られます。
サイトマップや集計のために、言語に関係なくすべてを取得したい場合は、language: "all"を渡します。
1つのクエリでのノードのすべての翻訳の取得
投稿およびタクソノミータームのtranslationsフィールドは、ノードの他のすべての言語バージョン(スラッグ、URI、言語コード、および要求したネストされたフィールド)を返します。1つのクエリ、1回のラウンドトリップで、ページのすべての言語バージョンを取得できます。
これは、フロントエンドで関連するクエリのチェーンをたどることなく、ページコンテンツ自体の横にレンダリングされる言語スイッチャーに必要なデータです。
多言語メニュー、タクソノミー、コメント、および言語データ
投稿にとどまらず、WPML GraphQLは同じlanguage引数と翻訳処理を以下に拡張します。
- メニューとメニュー項目。言語ごとのナビゲーションのための
menus(where: { language: "fr" })およびmenuItems(where: { language: "fr" })。 - タクソノミーターム。カテゴリー、タグ、カスタムタクソノミーはデフォルトで投稿の言語に従い、言語ごとに直接クエリできます。
- コメント。特定の言語の投稿に関連付けられたコメントを返します。
languagesおよびdefaultLanguageクエリ。サイトにインストールされているすべての言語を、コード、ロケール、ネイティブ名、国旗のURL、およびホームURLとともに一覧表示します。カスタム言語スイッチャーに最適なデータ形式です。
IDまたはスラッグによる特定の投稿の任意の言語でのクエリ
言語固有の識別子によって単一の翻訳された投稿を取得するには、2つのクエリ形式があります。
query PostBySlug {
post(id: "hola-mundo", idType: SLUG) {
title slug uri
}
}
query PostById {
post(id: "2", idType: DATABASE_ID) {
title slug uri
}
}
どちらの形式でも、フロントエンドに「これは翻訳ですか?」という個別のロジックを必要とせずに、翻訳されたタイトル、スラッグ、URIとともに翻訳された投稿が返されます。
現在のWPGraphQLリリースに対する維持
WPML GraphQL 5.2.0は、WPGraphQL 2.24.1およびWPGraphQL for ACF 3.0.0でテストされています。WPGraphQLを保守するチームは当社と協力しているため、多言語レイヤーはスキーマの変更に追従し続けます。WPGraphQLの新しいリリースが公開されると、WPML GraphQLもすぐに対応します。
ACFMLとWPGraphQL for ACFを追加した場合のACFとの連携
多くのヘッドレスサイトは、Advanced Custom Fieldsでコンテンツモデルを構築し、WPGraphQLを通じて公開しています。ACFMLとWPGraphQL for ACFを追加すると、ACFデータはスキーマの他の部分と同じ言語ルールに従います。
任意の言語でのACFオプションページのクエリ
オプションページはどの投稿にも属さないため、独自のlanguage引数を取ります。リピーターやフレキシブルコンテンツ内のサブフィールドも、その言語で返されます。以下のクエリは、officesリピーターとpromosフレキシブルコンテンツフィールドを読み取ります。WPGraphQL for ACF 3.0.0以降、オプションページはshow_in_graphqlをオンにした場合にのみスキーマに含まれます。
query StoreSettingsES {
storeSettings(language: "es") {
storeContact {
heading
offices { city openingHours }
promos {
... on StoreContactPromosBannerLayout { bannerText }
}
}
}
}
翻訳された投稿を返す関連フィールド
投稿およびカスタム投稿タイプのACFフィールドは、独自のlanguage引数を取りません。これらはリクエストの言語に従います。以下のクエリでは、where: { language: "es" }がクエリ全体の言語を設定します。
「コピー」に設定された関連フィールドは、すでに翻訳されたIDを保持しています。WPMLがフィールドを翻訳にコピーすると、ACFMLは各IDをその翻訳に置き換えます。翻訳がまだ存在しない場合は、元のIDを保持します。この設定は、ACFフィールドグループエディタの「翻訳設定」でフィールドごとに設定します。ACFカスタムフィールドの翻訳ガイドの関連フィールドを参照してください。
query BlendsES {
posts(where: { language: "es" }) {
nodes {
title
postExtras {
relatedGuide {
nodes { ... on Post { title languageCode } }
}
}
}
}
}
スペイン語の投稿はスペイン語のガイドを返します。
すべてのリクエストで言語を設定してください。IDまたはスラッグによって1つの投稿を読み取るクエリには、languageフィルターが含まれません。そのため、デフォルト言語で実行され、関連する投稿もデフォルト言語で返されます。
言語の設定方法は、WPMLのURLフォーマットによって異なります。言語ごとのドメインを使用する場合は、その言語のエンドポイント(https://es.example.com/graphql)を呼び出します。言語パラメーターを使用する場合は、エンドポイントにそれ(/graphql?lang=es)を追加します。ディレクトリ形式には言語ごとのエンドポイントがないため、クエリ内で言語によってフィルタリングします。
翻訳が不足している場合
WPMLはデフォルト言語にフォールバックしません。関連する投稿にリクエストされた言語の翻訳がない場合、その投稿は結果から除外されます。
{
"data": {
"posts": {
"nodes": [
{
"title": "Nuestras mezclas de la casa",
"postExtras": {
"relatedGuide": {
"nodes": [
{ "title": "Guía de compra de espresso", "languageCode": "es" }
]
}
}
}
]
}
}
}
このフィールドは2つのガイドを指しています。そのうちの1つだけがスペイン語に翻訳されているため、スペイン語のクエリは1つを返します。フロントエンドには短いリストが渡され、言語が混在することはありません。不足している投稿を翻訳すると、同じクエリに表示されます。
投稿タイプが翻訳可能である場合、リストは1つの言語に保たれます。投稿タイプを「翻訳として表示」に設定すると、WPMLは未翻訳のガイドをデフォルト言語で返します。この場合、リストには言語が混在します。