Skip navigation

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

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

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

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

Фильтруйте содержимое по языку, включая записи, таксономии, комментарии, меню и пункты меню.

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

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

На этой странице:

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

Чтобы начать работу, установи и активируй следующие плагины:

  • WPGraphQL
  • WPML
  • WPML String Translation
  • WPML GraphQL

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

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

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

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

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

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

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

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

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

Документация по WPML
Обновлено
28 ноября, 2024