WPML

フロントエンドからの言語ごとのコンテンツのクエリ

すべての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は未翻訳のガイドをデフォルト言語で返します。この場合、リストには言語が混在します。

WPMLに含まれるWPML GraphQL

WPML GraphQLはMultilingual CMSおよびWPML Agencyに同梱されています。追加の購入やサイトごとの費用は必要ありません。WPMLを一度購入するだけで、ヘッドレス多言語スタックに言語レイヤーが備わります。すでにWPMLをお持ちの場合は、WPMLダウンロードページからWPML GraphQLを有効化してください。