跳过导航

Home » WPML文档 » 相关项目 » WPML GraphQL- 为 WPGraphQL 模式添加多语言功能

WPML GraphQL- 为 WPGraphQL 模式添加多语言功能

WPML GraphQL可让您从 WPGraphQL 模式中查询、过滤和检索特定语言的内容和翻译。

主要功能

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

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

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

在本页:

所需插件

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

  • WPGraphQL
  • WPML
  • WPML String Translation
  • WPML GraphQL

要在 WPGraphQL 模式中包含 ACF 插件中的多语言字段,还需安装:

您能用它做什么? WPML GraphQL?

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

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

  • 获取所查询内容的语言信息
  • 访问帖子、分类标准和评论的翻译
  • 按语言过滤查询
  • 通过 ID 或标题在不同语言中查询特定帖子

例如,如下图所示,您可以轻松调出网站上所有帖子的列表,其中包括它们的语言代码、slugs、URI 和翻译详情。

使用查询组合器中的语言字段检索所有语言的帖子

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

查询语言和翻译信息

使用 WPML GraphQL,您可以在查询中使用语言翻译字段:

  • language 字段可让您检索详细信息,如语言代码、国旗 URL、本地名称、翻译名称以及帖子类型、分类标准、菜单、菜单项和评论的主页 URL。
  • languageCode 字段可获取帖子、分类术语、菜单、菜单项和注释的语言代码,而无需其他语言细节。
  • translations 字段检索帖子类型和分类术语的翻译。

当您查询评论时,languagelanguageCode 字段会与评论所属帖子的语言相匹配。

下面是一个查询示例,该查询可检索帖子及其相关详细信息,包括帖子标题、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时,请访问我们的 “已知问题和解决方案“页面,了解故障排除技巧。

还需要帮助?提交支持单

WPML文档
已更新
28 11 月, 2024