コンテンツへスキップ サイドバーへスキップ

Home » WPMLドキュメント » 関連プロジェクト » WPML GraphQL – WPGraphQLスキーマに多言語機能を追加する

WPML GraphQL – WPGraphQLスキーマに多言語機能を追加する

WPML GraphQLを使用すると、WPGraphQLスキーマから言語固有のコンテンツや翻訳をクエリ、フィルタリング、取得できます。

特長

投稿、タクソノミー、コメント、メニュー、メニュー項目などのコンテンツを言語別にフィルタリングする

WPGraphQLを言語フィールドで拡張し、WPMLプラグインから特定のデータを取得する

インストールされているすべての言語、または特定の言語にフォーカスしてデータを照会

必要なプラグイン

まず、次のプラグインをインストールして有効化します。

  • WPGraphQL
  • WPML
  • WPML String Translation
  • WPML GraphQL

ACFプラグインの多言語フィールドをWPGraphQLスキーマに含めるには、以下もインストールしてください:

WPML GraphQLで何ができますか?

WPML GraphQLはWPGraphQLと統合し、WPMLで作成された多言語コンテンツをクエリできるようにします。

GraphQL → GraphQL IDEからQuery Composerを使って次のことができる:

  • クエリするすべてのコンテンツの言語情報を取得する
  • 投稿、タクソノミー、コメントの翻訳にアクセスする
  • 言語によるクエリのフィルタリング
  • IDまたはスラッグによって、言語をまたいで特定の投稿をクエリする

例えば、下の画像が示すように、サイト上のすべての投稿のリストを、言語コード、スラッグ、URI、および翻訳の詳細とともに簡単に取得できます。

Query Composerの言語フィールドを使用して、すべての言語の投稿を取得する

以下では、多言語テストサイトを使用して、WPML GraphQLでコンテンツとその翻訳をクエリする方法を説明します。

言語および翻訳情報のクエリ

WPML GraphQLを使用すると、クエリ内でlanguageおよびtranslationフィールドを使用できます。

  • language フィールドを使用すると、投稿タイプ、タクソノミー、メニュー、メニュー項目、およびコメントの言語コード、国旗のURL、ネイティブ名、翻訳名、ホームページURLなどの詳細を取得できます。
  • languageCode フィールドは、追加の言語詳細なしで、投稿、タクソノミー用語、メニュー、メニュー項目、およびコメントの言語コードを取得します。
  • translations フィールドは、投稿タイプとタクソノミー用語の翻訳を取得します。

コメントをクエリすると、languageおよびlanguageCodeフィールドは、それらが属する投稿の言語と一致します。

以下は、投稿スラッグ、URI、言語コード、カテゴリー、および存在する翻訳を含む、関連する詳細とともに投稿を取得するクエリの例です:

query Posts{
  posts(where: {language: "en"}) {
  nodes {
  slug
  uri
  language {
  code
  }
  categories {
  nodes {
  name
  }
  }
  translations {
  slug
  uri
  language {
  code
  }
  categories {
  nodes {
  name
  }
  }
  }
  }
  }
}

このクエリを実行すると、各投稿の言語と翻訳の情報、およびカテゴリーなどの接続されたアイテムが返されます。接続は自動的にトップレベルアイテム(この場合は投稿)の言語に従います:

{
  "data": {
  "posts": {
  "nodes": [
  {
  "slug": "bye-world",
  "uri": "/2023/05/18/bye-world/",
  "language": {
  "code": "en"
  },
  "categories": {
  "nodes": [
  {
  "name": "End of the day"
  },
  {
  "name": "Greetings"
  }
  ]
  },
  "translations": [
  {
  "slug": "adios-mundo",
  "uri": "/es/2023/05/18/adios-mundo/",
  "language": {
  "code": "es"
  },
  "categories": {
  "nodes": [
  {
  "name": "Fin del día"
  },
  {
  "name": "Saludos"
  }
  ]
  }
  },
  {
  "slug": "tchau-mundo",
  "uri": "/pt-pt/2023/05/18/tchau-mundo/",
  "language": {
  "code": "pt-pt"
  },
  "categories": {
  "nodes": [
  {
  "name": "Fim do dia"
  },
  {
  "name": "Saudações"
  }
  ]
  }
  }
  ]
  },
  {
  "slug": "hello-world",
  "uri": "/2018/07/05/hello-world/",
  "language": {
  "code": "en"
  },
  "categories": {
  "nodes": [
  {
  "name": "Greetings"
  },
  {
  "name": "Start of the day"
  }
  ]
  },
  "translations": [
  {
  "slug": "hola-mundo",
  "uri": "/es/2018/07/05/hola-mundo/",
  "language": {
  "code": "es"
  },
  "categories": {
  "nodes": [
  {
  "name": "Inicio del día"
  },
  {
  "name": "Saludos"
  }
  ]
  }
  },
  {
  "slug": "ola-mundo",
  "uri": "/pt-pt/2018/07/05/ola-mundo/",
  "language": {
  "code": "pt-pt"
  },
  "categories": {
  "nodes": [
  {
  "name": "Começo do dia"
  },
  {
  "name": "Saudações"
  }
  ]
  }
  }
  ]
  }
  ]
  }
  }
}

言語フィルター

WPML GraphQLでは、languageフィルターを使用して以下のことが可能です:

  • 投稿、タクソノミー用語、メニュー、メニュー項目、またはコメントを特定の言語でフィルタリングする
  • フィルターを適切に設定して、特定の言語のコンテンツを取得する
  • フィルター値をallに設定して、言語に関係なくすべてのコンテンツを取得する

WPML GraphQLは接続をサポートしているため、投稿などのトップレベルアイテムを言語でフィルタリングすると、カテゴリーやタグなどの関連するすべてのアイテムが自動的に同じ言語に従います。これにより、クエリの一貫性と正確性が保たれます。

以下は、スペイン語の投稿を、そのスラッグ、URI、および接続されたカテゴリーとともに取得するクエリの例です:

query PostsES{
  posts(where: {language: "es"}) {
  nodes {
  slug
  uri
  categories {
  nodes {
  name
  }
  }
  }
  }
}

クエリが返す結果はこうだ:

{
  "data": {
  "posts": {
  "nodes": [
  {
  "slug": "adios-mundo",
  "uri": "/es/2023/05/18/adios-mundo/",
  "categories": {
  "nodes": [
  {
  "name": "Fin del día"
  },
  {
  "name": "Saludos"
  }
  ]
  }
  },
  {
  "slug": "hola-mundo",
  "uri": "/es/2018/07/05/hola-mundo/",
  "categories": {
  "nodes": [
  {
  "name": "Inicio del día"
  },
  {
  "name": "Saludos"
  }
  ]
  }
  }
  ]
  }
  }
}

言語をまたいだ特定の投稿のクエリ

WPML GraphQLを使用すると、投稿IDまたはスラッグによって、任意の言語の個々の投稿をクエリすることもできます。

例えば、¡Hola mundo! Hello world!のスペイン語訳)というタイトルの投稿があり、スラッグがhola-mundo、投稿IDが2の場合、次のクエリを使用して投稿を取得できます:

query PostBySlug {
  post(id: "hola-mundo", idType: SLUG) {
  title
  slug
  uri
  }
}

query PostById {
  post(id: "2", idType: DATABASE_ID) {
  title
  slug
  uri
  }
}

どちらのクエリも、¡Hola mundo!の投稿について、タイトル、スラッグ、URIを含む投稿データを正しく返します:

{
  "data": {
  "post": {
  "title": "¡Hola mundo!",
  "slug": "hola-mundo",
  "uri": "/es/2018/07/05/hola-mundo/"
  }
  }
}

インストールされている言語からデータを照会する

WPML GraphQLは、サイトにインストールされている言語に関するデータにアクセスするための2つのクエリを提供します:

  • languagesクエリは、登録されているすべての言語を、各言語の関連データとともに検索します。
  • defaultLanguageクエリは、サイトに設定されているデフォルト言語に関する情報を取得します

これらのクエリは、言語スイッチャーのような機能を構築する場合に役立ちます。

たとえば、インストールされているすべての言語のデータを取得するには、次のクエリーを実行します:

query Languages {
  languages {
  code
  country_flag_url
  default_locale
  native_name
  translated_name
  url
  }
}

上記のクエリーは次のような結果を生む:

{
  "data": {
  "languages": [
  {
  "code": "en",
  "country_flag_url": "http://site.com/wp-content/plugins/sitepress-multilingual-cms-release/res/flags/en.svg",
  "default_locale": "en_US",
  "native_name": "English",
  "translated_name": "English",
  "url": "http://site.com"
  },
  {
  "code": "es",
  "country_flag_url": "http://site.com/wp-content/plugins/sitepress-multilingual-cms-release/res/flags/es.svg",
  "default_locale": "es_ES",
  "native_name": "Español",
  "translated_name": "Spanish",
  "url": "http://site.com/es/"
  },
  {
  "code": "it",
  "country_flag_url": "http://site.com/wp-content/plugins/sitepress-multilingual-cms-release/res/flags/it.svg",
  "default_locale": "it_IT",
  "native_name": "Italiano",
  "translated_name": "Italian",
  "url": "http://site.com/it/"
  }
  ]
  }
}

ACFでのWPML GraphQLの使用

ACFプラグインでWPGraphQLを使用している場合、WPML GraphQLおよびACFML (ACF Multilingual) アドオンがこの機能を拡張します。これにより、異なる言語のカスタムフィールドデータをクエリできるようになります。

WPGraphQLとそのACF拡張機能は、ACFオプションページをルートオブジェクトとして公開します。WPML GraphQLとACFMLアドオンを組み合わせることで、オプションページのクエリに言語パラメータが追加され、サイトのアクティブな言語のいずれかに一致する言語コード(例: “de”、”pt-pt”)が期待されます。これにより、特定の言語でデータをクエリできます:

query NewQuery {
  myOptionPage(language: "de") {
  addressFieldGroup {
  addressTitle
  repeaterAddressDetails {
  addressDetails
  }
  }
  }
}

WPML GraphQLを使い始める

WPML GraphQLを使用するには、WPML Multilingual CMSまたはWPML Multilingual Agencyプランが必要です。どちらのプランでも、WPMLプラグインと幅広い追加アドオンにアクセスでき、すべて追加料金なしで含まれています。

あなたのサイトに最適なプランを確認する

お困りですか?

WPML GraphQLの使用に問題がある場合は、トラブルシューティングのヒントについて既知の問題と解決策のページをご覧ください。

まだヘルプが必要ですか?サポートチケットを送信してください。

更新済み
2026年5月6日