在本页
WPML GraphQL 目前与 WPGraphQL 2.0 不兼容。我们正在积极努力建立兼容性,一旦可用我们将会更新。
所需插件
要开始使用,请安装并激活以下插件:
- WPGraphQL
- WPML
- WPML String Translation
- WPML GraphQL
要在 WPGraphQL 模式中包含 ACF 插件中的多语言字段,还需安装:
- Advanced Custom Fields Multilingual(ACFML)
- WPGraphQL for Advanced 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、语言代码、类别和任何存在的翻译:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | query Posts{ posts(where: {language: "en" }) { nodes { slug uri language { code } categories { nodes { name } } translations { slug uri language { code } categories { nodes { name } } } } } } |
运行此查询会返回每个帖子的语言和翻译信息,以及类别等连接项。连接会自动遵循顶层项目(本例中为帖子)的语言:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | { "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 和相关类别:
1 2 3 4 5 6 7 8 9 10 11 12 13 | query PostsES{ posts(where: {language: "es" }) { nodes { slug uri categories { nodes { name } } } } } |
下面是查询返回的结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | { "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 或标题以任何语言查询单个帖子。
例如,如果您有一篇标题为¡Hola mundo!(Hello world的西班牙语翻译)的文章,其别名为hola-mundo,文章 ID 为2,您可以使用以下查询来检索该文章:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | query PostBySlug { post(id: "hola-mundo" , idType: SLUG) { title slug uri } } query PostById { post(id: "2" , idType: DATABASE_ID) { title slug uri } } |
这两个查询都将正确返回 ¡Holamundo!帖子的帖子数据,包括标题、标签和 URI:
1 2 3 4 5 6 7 8 9 | { "data" : { "post" : { "title" : "¡Hola mundo!" , "slug" : "hola-mundo" , "uri" : "/es/2018/07/05/hola-mundo/" } } } |
从已安装的语言中查询数据
WPML GraphQL提供了两种查询方式,用于访问网站上安装的语言数据:
- 语言查询可检索所有已注册的语言以及每种语言的相关数据。
- defaultLanguage查询可检索有关网站默认语言设置的信息
如果您希望构建语言切换器等功能,这些查询会很有帮助。
例如,要获取所有已安装语言的数据,可以运行以下查询:
1 2 3 4 5 6 7 8 9 10 | query Languages { languages { code country_flag_url default_locale native_name translated_name url } } |
上述查询结果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | { "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" , }, { "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" , }, { "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" , } ] } } |
使用 WPML GraphQL与盖茨比和 ACF
Gatsby 允许您从WordPress 获取数据,并使用 WPML GraphQL,你就可以为你的 Gatsby 站点提供多语言内容和特定语言数据。
如果您使用WP GraphQL 和 ACF 插件、 WPML GraphQL和 ACF 多语言扩展了这一功能,使您能够以不同语言查询自定义字段数据。
例如,假设您有一个 Gatsby 安装,并安装了gatsby-source-graphql附加包,而您的 WordPress 网站安装了 WPML(西班牙语作为第二语言)和 ACF。
您可以使用简单的 GraphQL 查询,在 Gatsby 中检索包含标题、语言代码和自定义 ACF 字段的多语言帖子。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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时,请访问我们的 “已知问题和解决方案“页面,了解故障排除技巧。
还需要帮助?提交支持单。