在本页:
- 所需插件
- 您能用它做什么? WPML GraphQL?
- 查询语言和翻译信息
- 语言过滤
- 跨语言查询特定职位
- 从已安装的语言中查询数据
- 使用 WPML GraphQL与盖茨比和 ACF
- 开始使用 WPML GraphQL
- 需要帮助吗?
所需插件
要开始使用,请安装并激活以下插件:
- WPGraphQL
- WPML
- WPML String Translation
- WPML GraphQL
要在 WPGraphQL 模式中包含 ACF 插件中的多语言字段,还需安装:
- Advanced Custom Fields Multilingual(ACFML)
- WPGraphQL forAdvanced Custom Fields
您能用它做什么? WPML GraphQL?
WPML GraphQL与 WPGraphQL 集成,允许您查询使用WPML 创建的多语言内容。
从 GraphQL → GraphQL IDE,您可以使用查询合成器:
- 获取所查询内容的语言信息
- 访问帖子、分类标准和评论的翻译
- 按语言过滤查询
- 通过 ID 或标题在不同语言中查询特定帖子
例如,如下图所示,您可以轻松调出网站上所有帖子的列表,其中包括它们的语言代码、slugs、URI 和翻译详情。
下面,我们将使用一个多语言测试网站向您展示如何使用 WPML GraphQL来查询内容及其翻译。
查询语言和翻译信息
使用 WPML GraphQL,您可以在查询中使用语言和翻译字段:
-
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让您可以使用语言过滤器:
- 按特定语言过滤帖子、分类术语、菜单、菜单项或评论
- 通过设置相应的过滤器,检索特定语言的内容
- 将过滤值设置为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"
}
]
}
}
]
}
}
}
跨语言查询特定职位
使用 WPMLGraphQL,您还可以通过帖子 ID 或标题以任何语言查询单个帖子。
例如,如果您有一个标题为 ¡Holamundo! (的西班牙语译文),标题为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
}
}
这两个查询都将正确返回 ¡Holamundo!帖子的帖子数据,包括标题、标签和 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
Gatsby 允许您从WordPress 获取数据,并使用 WPML GraphQL,你就可以为你的 Gatsby 站点提供多语言内容和特定语言数据。
如果您使用WP GraphQL 和 ACF 插件、 WPML GraphQL和 ACF 多语言扩展了这一功能,使您能够以不同语言查询自定义字段数据。
例如,假设您安装了带有gatsby-source-graphql附加软件包的Gatsby,而您的WordPress 网站安装了WPML (西班牙语作为辅助语言)和 ACF。
您可以使用简单的 GraphQL 查询,在 Gatsby 中检索包含标题、语言代码和自定义 ACF 字段的多语言帖子。
export const doQuery = graphql`
{
wordpress {
posts(where: {language: "en"}) {
nodes {
title
language {
code
}
postfields{
subtitle
}
translations {
title
language {
code
}
postfields{
subtitle
}
}
}
}
}
}
`;
开始使用 WPML GraphQL
使用 WPML GraphQL,您需要 WPML Multilingual CMS或 WPML Multilingual Agency计划。这两种计划均可访问WPML 插件和各种附加组件,所有这些均不收取额外费用。
需要帮助吗?
如果您在使用 WPML GraphQL时,请访问我们的 “已知问题和解决方案“页面,了解故障排除技巧。
还需要帮助?提交支持单。