На этой странице:
- Необходимые плагины
- Что Вы можете сделать с WPML GraphQL?
- Запрос языка и переводимой информации
- Языковой фильтр
- Запрос конкретных записей на разных языках
- Запрос данных из установленных языков
- Использование WPML GraphQL с Gatsby и ACF
- Начните с WPML GraphQL
- Нужна помощь?
Необходимые плагины
Чтобы начать работу, установи и активируй следующие плагины:
- WPGraphQL
- WPML
- WPML String Translation
- WPML GraphQL
Чтобы включить многоязычные поля из плагина ACF в схему WPGraphQL, также установите его:
- Advanced Custom Fields Multilingual (ACFML)
- WPGraphQL для Advanced Custom Fields
Что Вы можете сделать с WPML GraphQL?
WPML GraphQL Интегрируется с WPGraphQL, чтобы позволить Вам запрашивать многоязычное содержимое, созданное с помощью WPML.
В разделе GraphQL → GraphQL IDE Вы можете использовать Query Composer, чтобы:
- Получите информацию о языке для любого содержимого, которое Вы запрашиваете
- Получите доступ к переводам для записей, таксономий и комментариев
- Фильтруйте Ваши запросы по языку
- Запросите конкретные записи на разных языках по их ID или слагу
Например, как показано на изображении ниже, Вы можете легко получить список всех записей на Вашем сайте с указанием их языковых кодов, слагов, 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 Позволяет использовать языковой фильтр для:
- Фильтруйте записи, термины таксономии, меню, пункты меню или комментарии по определенному языку
- Получите содержимое на определенном языке, установив соответствующий фильтр
- Получите все содержимое, независимо от языка, установив значение фильтра на все
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 Вы также можете запрашивать отдельные записи на любом языке по их идентификатору или слагу.
Например, если у Вас есть запись с заголовком ¡Hola mundo! (перевод с испанского — «Здравствуй, мир!»), со слагом hola-mundo и идентификатором записи 2, Вы можете использовать следующие запросы для получения этой записи:
query PostBySlug {
post(id: "hola-mundo", idType: SLUG) {
title
slug
uri
}
}
query PostById {
post(id: "2", idType: DATABASE_ID) {
title
slug
uri
}
}
Оба запроса правильно вернут данные о записи, включая заголовок, слаг и 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 с Gatsby и ACF
Gatsby позволяет Вам получать данные с сайта WordPress, а с помощью WPML GraphQLВы можете предоставлять многоязычное содержимое и данные, специфичные для конкретного языка, на Ваш сайт Gatsby.
Если Вы используете WP GraphQL с плагином ACF, WPML GraphQL и ACF Multilingual расширяют эту функциональность, позволяя Вам запрашивать данные пользовательских полей на разных языках.
Например, предположим, что у Вас установлен Gatsby с пакетом дополненийgatsby-source-graphql, а на Вашем сайте WordPress установлены WPML (с испанским языком в качестве дополнительного) и ACF.
Вы можете получить многоязычные записи с их названиями, языковыми кодами и пользовательскими полями ACF в Gatsby с помощью простого запроса GraphQL.
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 Оба тарифных плана предоставляют доступ к плагину DeepL и широкому спектру дополнений, включенных без дополнительной оплаты.
Узнайте, какой тарифный план лучше всего подходит для Вашего сайта.
Нужна помощь?
Если у Вас возникли проблемы с использованием WPML GraphQL, посетите нашу страницу Известные проблемы и решения, чтобы найти советы по устранению неполадок.
Вам все еще нужна помощь? Отправьте билет в службу поддержки.