WPML

Запрос контента по языкам из Вашего фронтенда

Каждый запрос WPGraphQL получает аргумент language. Фильтруйте записи, произвольные типы записей, термины таксономии, меню, элементы меню и комментарии по языку в одном поле — никакой пост-фильтрации на фронтенде, никакого удвоения объема запросов, никакого угадывания языка.

query PostsES {
  posts(where: { language: "es" }) {
    nodes { slug uri title }
  }
}

Когда Вы фильтруете узел верхнего уровня по языку, связанные элементы (рубрики, метки, произвольные таксономии) автоматически следуют тому же языку. Результаты согласованы без дополнительных аргументов для каждого вложенного поля.

Хотите получить все данные независимо от языка для XML-карты сайта или общего подсчета? Передайте language: "all".

Получение всех переводов узла в одном запросе

Поле translations в записях и терминах таксономии возвращает все версии узла на других языках: слаг, URI, код языка и любые вложенные поля, которые Вы запросите. Один запрос, один цикл обмена данными, все языковые версии страницы.

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

Мультиязычные меню, таксономии, комментарии и данные о языках

Помимо записей, WPML GraphQL распространяет тот же аргумент language и обработку переводов на:

  • Меню и элементы меню. menus(where: { language: "fr" }) и menuItems(where: { language: "fr" }) для навигации по каждому языку.
  • Термины таксономии. Рубрики, метки и произвольные таксономии по умолчанию следуют языку своей записи и могут запрашиваться напрямую по языку.
  • Комментарии. Возврат комментариев, связанных с записями на определенном языке.
  • Запросы languages и defaultLanguage. Список всех установленных языков на сайте с кодом, локалью, родным названием, URL-адресом флага страны и URL-адресом главной страницы. Подходящий формат данных для пользовательского переключателя языков.

Запрос конкретной записи по ID или слагу на любом языке

Существуют два формата запроса для получения одной переведенной записи по ее языковому идентификатору:

query PostBySlug {
  post(id: "hola-mundo", idType: SLUG) {
    title slug uri
  }
}
query PostById {
  post(id: "2", idType: DATABASE_ID) {
    title slug uri
  }
}

Любой из этих форматов возвращает переведенную запись с ее переведенным заголовком, слагом и URI — без отдельной логики «это перевод?» на фронтенде.

Поддержка актуальных релизов WPGraphQL

Мы протестировали WPML GraphQL 5.2.0 с WPGraphQL 2.24.1 и WPGraphQL for ACF 3.0.0. Команда, поддерживающая WPGraphQL, работает с нами, чтобы мультиязычный слой развивался вместе со схемой. Когда WPGraphQL выпускает новый релиз, WPML GraphQL обновляется следом.

Работает с ACF при добавлении ACFML и WPGraphQL for ACF

Многие headless-сайты строят свою модель контента в Advanced Custom Fields и предоставляют к ней доступ через WPGraphQL. Добавьте ACFML и WPGraphQL for ACF, и Ваши данные ACF будут следовать тем же языковым правилам, что и остальная часть схемы.

Запрос страницы параметров ACF на любом языке

Страницы параметров находятся вне каких-либо записей, поэтому они принимают собственный аргумент language. Подполя внутри повторителей и гибкого контента также возвращаются на этом языке. Запрос ниже читает повторитель offices и поле гибкого контента promos. Начиная с WPGraphQL for ACF 3.0.0, страница параметров присутствует в схеме только в том случае, если для нее включен параметр show_in_graphql.

query StoreSettingsES {
  storeSettings(language: "es") {
    storeContact {
      heading
      offices { city openingHours }
      promos {
        ... on StoreContactPromosBannerLayout { bannerText }
      }
    }
  }
}

Поля отношений возвращают переведенную запись

Поля ACF в записях и произвольных типах записей не принимают собственный аргумент language. Они следуют языку запроса. В приведенном ниже запросе where: { language: "es" } задает этот язык для всего запроса.

Поле отношений, для которого установлено значение Копировать, уже содержит переведенные ID. Когда WPML копирует поле в перевод, ACFML заменяет каждый ID на его перевод. Он сохраняет исходный ID, если перевод еще не существует. Вы задаете этот параметр для каждого поля в редакторе групп полей ACF в разделе Настройки перевода. См. Поля отношений в нашем руководстве по переводу произвольных полей ACF.

query BlendsES {
  posts(where: { language: "es" }) {
    nodes {
      title
      postExtras {
        relatedGuide {
          nodes { ... on Post { title languageCode } }
        }
      }
    }
  }
}

Испанская запись возвращает испанское руководство.

Задавайте язык для каждого запроса. Запрос, который читает одну запись по ID или слагу, не содержит фильтра language. В этом случае он выполняется на языке по умолчанию, и связанные записи также возвращаются на языке по умолчанию.

То, как Вы задаете язык, зависит от Вашего формата URL в WPML. При использовании домена для каждого языка вызывайте конечную точку этого языка: https://es.example.com/graphql. При использовании параметра языка добавляйте его к конечной точке: /graphql?lang=es. Формат каталогов не имеет конечных точек для каждого языка, поэтому фильтруйте по языку внутри самого запроса.

Когда перевод отсутствует

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

{
  "data": {
    "posts": {
      "nodes": [
        {
          "title": "Nuestras mezclas de la casa",
          "postExtras": {
            "relatedGuide": {
              "nodes": [
                { "title": "Guía de compra de espresso", "languageCode": "es" }
              ]
            }
          }
        }
      ]
    }
  }
}

Поле указывает на два руководства. Только одно из них переведено на испанский язык, поэтому испанский запрос возвращает одно. Ваш фронтенд получает более короткий список, и никогда — смесь языков. Переведите недостающую запись, и она появится в том же запросе.

Список остается на одном языке, когда тип записи является переводимым. Если Вы установите для типа записи параметр Отображать как переведенные, WPML вернет непереведенное руководство на языке по умолчанию. В этом случае в списке будут смешаны языки.

WPML GraphQL входит в состав WPML

WPML GraphQL поставляется с тарифами Multilingual CMS и WPML Agency. Никаких отдельных покупок, никакой платы за каждый сайт. Купите WPML один раз, и Ваш мультиязычный headless-стек получит свой языковой слой. Если у Вас уже есть WPML, активируйте WPML GraphQL на Вашей странице загрузок WPML.