跳到内容 跳到侧边栏

Home » WPML 文档 » 相关项目 » WPML GraphQL – 为 WPGraphQL Schema 添加多语言功能

WPML GraphQL – 为 WPGraphQL Schema 添加多语言功能

WPML GraphQL 允许您从 WPGraphQL schema 中查询、过滤和检索特定语言的内容及翻译。

主要功能

按语言过滤内容,包括文章、分类法、评论、菜单和菜单项

使用语言字段扩展 WPGraphQL,以从 WPML 插件中检索特定数据

查询所有已安装语言的数据,或专注于特定语言

必需的插件

要开始使用,请安装并激活以下插件:

  • WPGraphQL
  • WPML
  • WPML String Translation
  • WPML GraphQL

要在 WPGraphQL schema 中包含来自 ACF 插件的多语言字段,还请安装:

您可以使用 WPML GraphQL 做什么?

WPML GraphQL 与 WPGraphQL 集成,允许您查询使用 WPML 创建的多语言内容。

GraphQL → GraphQL IDE,您可以使用查询合成器

  • 获取您查询的任何内容的语言信息
  • 访问文章、分类法和评论的翻译
  • 按语言过滤查询
  • 通过 ID 或 Slug 跨语言查询特定文章

例如,如下图所示,您可以轻松调出网站上所有文章的列表,包括它们的语言代码、Slug、URI 以及翻译详情。

在 Query Composer 中使用语言字段检索所有语言的文章

下面,我们将使用一个多语言测试网站向您展示如何使用 WPML GraphQL 查询内容及其翻译。

查询语言和翻译信息

借助 WPML GraphQL,您可以在查询中使用 languagetranslation 字段:

  • language 字段允许您检索文章类型、分类法、菜单、菜单项和评论的详细信息,如语言代码、国旗 URL、原生名称、翻译名称和首页 URL。
  • languageCode 字段可获取文章、分类法术语、菜单、菜单项和评论的语言代码,而无需额外的语言详情。
  • translations 字段可检索文章类型和分类法术语的翻译。

当您查询评论时,languagelanguageCode 字段会匹配其所属文章的语言。

这是一个查询示例,它检索文章及其相关详情,包括文章 Slug、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 支持关联,因此当您按语言过滤顶级项(如文章)时,所有相关项(如分类和标签)都将自动遵循相同的语言。这使您的查询保持一致且准确。

这是一个查询示例,它检索西班牙语的文章,包括它们的 Slug、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 或 Slug 查询任何语言的单篇文章。

例如,如果您有一篇标题为 ¡Hola mundo! Hello world! 的西班牙语翻译)的文章,其 Slug 为 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! 这篇文章的数据,包括标题、Slug 和 URI:

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

从已安装的语言中查询数据

WPML GraphQL 提供了两个查询,用于访问网站上已安装语言的数据:

  • 语言查询可检索所有已注册的语言以及每种语言的相关数据。
  • 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/"
  }
  ]
  }
}

将 WPML GraphQL 与 ACF 结合使用

如果您将 WPGraphQL 与 ACF 插件结合使用,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 日