Перейти к содержимому Перейти к боковой панели

Home » Документация WPML » Связанные проекты » WPML GraphQL — добавление многоязычной функциональности в схему WPGraphQL

WPML GraphQL — добавление многоязычной функциональности в схему WPGraphQL

WPML GraphQL позволяет запрашивать, фильтровать и получать контент и переводы для конкретных языков из схемы WPGraphQL.

Ключевые особенности

Фильтрация контента по языку, включая записи, таксономии, комментарии, меню и элементы меню

Расширение WPGraphQL языковыми полями для получения конкретных данных из плагина WPML

Запрашивайте данные на всех установленных языках или сосредоточьтесь на определенных языках.

Необходимые плагины

Для начала установите и активируйте следующие плагины:

  • WPGraphQL
  • WPML
  • WPML String Translation
  • WPML GraphQL

Чтобы включить многоязычные поля из плагина ACF в схему WPGraphQL, также установите:

Что можно делать с WPML GraphQL?

WPML GraphQL интегрируется с WPGraphQL, позволяя запрашивать многоязычный контент, созданный с помощью WPML.

В разделе GraphQL → GraphQL IDE Вы можете использовать Query Composer, чтобы:

  • Получение информации о языке для любого запрашиваемого контента
  • Доступ к переводам записей, таксономий и комментариев
  • Фильтруйте Ваши запросы по языку
  • Запрос конкретных записей на разных языках по их ID или slug

Например, как показано на изображении ниже, вы можете легко получить список всех записей на вашем сайте с их языковыми кодами, slug, URI и сведениями о переводах.

Использование языковых полей в Query Composer для получения записей на всех языках

Ниже мы используем многоязычный тестовый сайт, чтобы показать, как использовать 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"
  }
  ]
  }
  }
  ]
  }
  }
}

Запрос конкретных записей на разных языках

С помощью WPMLGraphQL вы также можете запрашивать отдельные записи на любом языке по их 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
  }
}

Оба запроса правильно вернут данные записи, включая заголовок, slug и URI, для записи ¡Hola mundo!:

{
  "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, посетите нашу страницу Известные проблемы и решения для получения советов по устранению неполадок.

Вам все еще нужна помощь? Отправьте билет в службу поддержки.

Обновлено
06.05.2026