WPML — один из самых популярных плагинов для создания мультиязычных сайтов на WordPress. Но несмотря на простоту базовой настройки, у многих разработчиков возникают вопросы, как более тонко управлять переводом контента, особенно когда речь идет о сложных пользовательских полях (custom fields). В этой статье мы подробно разберем, как использовать поля WPML для контроля перевода, как правильно регистрировать пользовательские поля и что делать, если стандартных настроек недостаточно.
Что такое поля WPML и зачем нужен контроль перевода пользовательских полей
WPML позволяет переводить не только стандартные заголовки и содержимое постов, но и данные, хранящиеся в пользовательских полях. Это очень важно для кастомных типов записей, где информация часто лежит именно в метаполях. Без правильной настройки WPML может не распознавать эти поля как переводимые, и тогда при смене языка вы увидите либо пустое значение, либо значение на основном языке.
Контроль перевода полей нужен для того, чтобы:
- Определить, какие поля должны переводиться, а какие — оставаться одинаковыми на всех языках.
- Избежать дублирования или потерь данных при обновлении.
- Обеспечить правильное отображение информации в шаблонах темы.
WPML предлагает в админке раздел Перевод пользовательских полей, где можно указать, как именно обрабатывать каждое поле: переводить, копировать или игнорировать.
Регистрация пользовательских полей для перевода в WPML
Для начала нужно убедиться, что пользовательские поля зарегистрированы корректно и WPML «видит» их в списке для управления.
Чтобы добавить поля в список WPML, перейдите в WPML > Настройки > Перевод пользовательских полей. Там вы увидите список всех полей, которые плагин «подхватил» из базы данных.
Если поле отсутствует, можно добавить его вручную. Для этого введите точное имя поля и выберите один из режимов:
- Переводить — поле переводится отдельно для каждого языка.
- Копировать — поле дублируется на всех языках.
- Игнорировать — поле не переводится и не копируется.
Например, если у вас есть поле _wplang_custom_text, которое содержит текст, зависящий от языка, выберите «Переводить».
Пример кода регистрации метаполей в ACF с поддержкой WPML
Если вы используете Advanced Custom Fields, убедитесь, что поля зарегистрированы правильно и что WPML способен их обработать. Ниже пример регистрации группы полей:
function wplang_register_acf_fields() {
if(function_exists('acf_add_local_field_group')) {
acf_add_local_field_group(array(
'key' => 'group_wplang_example',
'title' => 'Пример пользовательских полей',
'fields' => array(
array(
'key' => 'field_wplang_custom_text',
'label' => 'Текст для перевода',
'name' => '_wplang_custom_text',
'type' => 'text',
),
),
'location' => array(
array(
array(
'param' => 'post_type',
'operator' => '==',
'value' => 'post',
),
),
),
));
}
}
add_action('acf/init', 'wplang_register_acf_fields');После этого в WPML настройках укажите, что поле _wplang_custom_text должно переводиться.
Работа с мультиязычными данными в шаблонах WordPress
Чтобы корректно вывести переведенное значение поля, используйте стандартные функции WordPress и WPML. Например, чтобы получить значение поля, используйте функцию get_post_meta(), WPML автоматически вернет значение для текущего языка.
Пример вывода поля в шаблоне:
$custom_text = get_post_meta(get_the_ID(), '_wplang_custom_text', true);
echo esc_html($custom_text);Если вы используете ACF, то функция get_field() также вернет корректное значение для текущего языка:
$custom_text = get_field('_wplang_custom_text');
echo esc_html($custom_text);Это работает благодаря тому, что WPML синхронизирует значения полей для каждого языка.
Решение проблемы с несинхронизированными полями
Иногда при переводе записи поля не обновляются автоматически. Чтобы решить эту проблему, можно использовать хук WPML для синхронизации метаданных:
function wplang_sync_custom_fields($master_post_id, $lang, $post_array, $id_map) {
$translated_post_id = apply_filters('wpml_object_id', $master_post_id, 'post', false, $lang);
if(!$translated_post_id) return;
$custom_fields = array('_wplang_custom_text');
foreach($custom_fields as $field) {
$value = get_post_meta($master_post_id, $field, true);
update_post_meta($translated_post_id, $field, $value);
}
}
add_action('wpml_update_translatable_content', 'wplang_sync_custom_fields', 10, 4);Этот код позволяет при обновлении оригинальной записи автоматически копировать значения важных полей в переводы.
Использование плагина Clearfy для оптимизации WPML
Плагин Clearfy помогает оптимизировать работу WordPress и совместимость с WPML. Он умеет отключать лишние функции, которые могут замедлять работу мультиязычных сайтов, а также улучшает кэширование и уменьшает количество запросов.
Clearfy совместим с WPML и позволяет избежать конфликтов при работе с пользовательскими полями.
Как настроить Clearfy вместе с WPML
1. Установите и активируйте плагин Clearfy.
2. В разделе Clearfy включите оптимизации, связанные с кэшированием и управлением метаполями.
3. Проверьте, что WPML корректно работает с пользовательскими полями после включения оптимизаций.
Это позволит повысить скорость загрузки страниц и снизить нагрузку на сервер, особенно на крупных мультиязычных проектах.
Выводы и рекомендации по работе с WPML и пользовательскими полями
Контроль перевода пользовательских полей — ключевой момент при создании мультиязычных сайтов на WordPress с WPML. Правильная регистрация полей, их настройка в админке плагина и корректный вывод в шаблонах позволяют избежать многих проблем с пустыми или некорректными переводами.
Если вы используете ACF, всегда проверяйте, что поля доступны для перевода и что плагин WPML видит их в списке. При необходимости используйте дополнительные хуки для синхронизации данных.
Для оптимизации работы мультиязычного сайта рекомендуем использовать Clearfy, который улучшит производительность и стабильность работы вместе с WPML.