在此页面上
必需的插件
要开始使用,请安装并激活以下插件:
- WPGraphQL
- WPML
- WPML String Translation
- WPML GraphQL
要在 WPGraphQL schema 中包含来自 ACF 插件的多语言字段,还请安装:
- Advanced Custom Fields Multilingual (ACFML)
- WPGraphQL for Advanced Custom Fields
您可以使用 WPML GraphQL 做什么?
WPML GraphQL 与 WPGraphQL 集成,允许您查询使用 WPML 创建的多语言内容。
从 GraphQL → GraphQL IDE,您可以使用查询合成器:
- 获取您查询的任何内容的语言信息
- 访问文章、分类法和评论的翻译
- 按语言过滤查询
- 通过 ID 或 Slug 跨语言查询特定文章
例如,如下图所示,您可以轻松调出网站上所有文章的列表,包括它们的语言代码、Slug、URI 以及翻译详情。
下面,我们将使用一个多语言测试网站向您展示如何使用 WPML GraphQL 查询内容及其翻译。
查询语言和翻译信息
借助 WPML GraphQL,您可以在查询中使用 language 和 translation 字段:
-
language字段允许您检索文章类型、分类法、菜单、菜单项和评论的详细信息,如语言代码、国旗 URL、原生名称、翻译名称和首页 URL。 -
languageCode字段可获取文章、分类法术语、菜单、菜单项和评论的语言代码,而无需额外的语言详情。 -
translations字段可检索文章类型和分类法术语的翻译。
当您查询评论时,language 和 languageCode 字段会匹配其所属文章的语言。
这是一个查询示例,它检索文章及其相关详情,包括文章 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 时遇到困难,请访问我们的已知问题和解决方案页面以获取故障排除提示。
还需要帮助?提交支持单。

