wplang.ru wordpress WP Lang

Как использовать поля WPML для контроля перевода в WordPress

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.

×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙