Настройка плагина WPML для мультиязычности WordPress
WPML (WordPress Multilingual Plugin) — платный плагин для создания многоязычных сайтов на WordPress. Используется на сотнях тысяч сайтов и де-факто является стандартом для серьёзных мультиязычных проектов с поддержкой WooCommerce.
Компоненты WPML
WPML состоит из нескольких плагинов, устанавливаемых отдельно:
- WPML Multilingual CMS — ядро, без которого ничего не работает
- WPML String Translation — перевод строк темы, плагинов, виджетов
- WPML Translation Management — рабочие процессы перевода с назначением переводчиков
- WPML Media Translation — отдельные изображения для разных языков
- WooCommerce Multilingual — поддержка товаров, атрибутов, вариаций, корзины
Минимальный набор: CMS + String Translation. Для интернет-магазина добавляется WooCommerce Multilingual.
Языковая структура URL
WPML поддерживает три варианта:
1. Разные поддомены: ru.example.com / en.example.com
2. Подпапки: example.com/ru/ / example.com/en/
3. Разные домены: example.ru / example.com
Подпапки — самый распространённый вариант. Настраивается в WPML → Languages → Language URL format.
Создание переводов контента
Переводы создаются двумя способами:
Вручную: в редакторе поста появляется блок «Translation» с кнопками для каждого языка. Нажав «+» или карандаш, открывается редактор перевода с оригиналом и переводом рядом.
Через Translation Management: посты отправляются в очередь переводов, назначаются переводчикам (локальным или через WPML Translation Services), возвращаются с переводом.
Перевод строк темы и плагинов
WPML → Theme and Plugins Localization
→ Выбрать тему → Scan for strings
После сканирования все строки появляются в String Translation для ручного перевода или загрузки через .po/.mo файлы.
Строки с JavaScript-вставкой через wp_localize_script сканируются автоматически начиная с WPML 4.5.
Настройка WooCommerce
После установки WooCommerce Multilingual:
- WPML → WooCommerce Multilingual → Products — переводить ли каждый товар отдельно или синхронизировать поля
- Currencies — можно задать разные валюты для разных языков (EUR для немецкого, GBP для английского)
- Shipping — способы доставки переводятся отдельно
Таблица соответствий переводов: wpml_translations хранит trid (translation group id), language_code, element_id (post_id), element_type (post/post_type).
Программный доступ к переводам
// Получить ID перевода поста на конкретный язык
$translated_id = apply_filters( 'wpml_object_id', $original_post_id, 'post', true, 'en' );
// Получить текущий язык
$current_language = apply_filters( 'wpml_current_language', null );
// Переключить язык программно
do_action( 'wpml_switch_language', 'de' );
$german_posts = get_posts( [...] );
do_action( 'wpml_switch_language', null ); // восстановить
Синхронизация полей
В WPML → Settings → Custom Fields Translation задаётся, что происходит с кастомными полями поста при переводе:
-
Copy— скопировать значение в перевод (для числовых полей, дат) -
Copy once— скопировать только при первоначальном создании перевода -
Translate— поле переводится независимо -
Ignore— не копировать
ACF-поля определяются автоматически через интеграцию с ACF.
Типичные проблемы
Дублирование контента в поиске — если sitemap генерируется Yoast без учёта языков. Решение: в Yoast включить поддержку WPML в Yoast SEO → Integrations, или использовать WPML XML Sitemap.
Пустые переводы в REST API — при обращении к /wp-json/wp/v2/posts возвращаются посты только текущего языка. Для явного указания языка: добавить параметр ?lang=en к запросу (WPML добавляет этот параметр).
Медленный сайт — WPML добавляет JOIN к каждому WP_Query. На больших базах (10k+ постов, 3+ языка) это ощутимо. Решение: индексы на wpml_translations.trid, кеш объектов (Redis/Memcached).
Сроки
Установка и настройка языков, перевод существующего контента до 50 страниц — 2–3 рабочих дня. Магазин WooCommerce, кастомные типы записей, настройка Translation Management с переводчиками — 4–6 дней.







