Автоматический перевод пользовательских текстовых полей WooCommerce в WordPress

Диагностика проблемы: почему стандартный перевод не работает с пользовательскими полями

В WooCommerce и кастомных темах часто используются текстовые поля (custom fields) для дополнительных данных товаров — описания, инструкции, заметки и т.п. При мультиязычности стандартные плагины, такие как Polylang или WPML, не всегда автоматически переводят содержимое этих полей. Это приводит к ситуации, когда на странице товара в другом языке отображается оригинальный текст, что ухудшает пользовательский опыт.

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

  • Откройте товар в админке WordPress и проверьте, есть ли дополнительные текстовые поля с данными.
  • Переключитесь на другой язык сайта и проверьте, что эти поля остались без перевода.
  • Проверьте, как плагин мультиязычности работает с другими типами контента.

Пошаговое решение: как автоматически переводить пользовательские текстовые поля WooCommerce

1. Определите, какие именно поля нужно перевести

Обычно пользовательские поля хранятся в метаданных товаров. Например, поле _custom_instructions хранит инструкции по применению товара.

2. Используйте хук WooCommerce для перевода метаданных

Для вывода перевода нужно перехватить вызовы метаданных и подставлять переведённый текст. Ниже пример функции для авто-перевода с использованием Google Translate API (или любого другого API автоперевода):

function wc_autotranslate_custom_fields( $value, $object_id, $meta_key, $single ) {
    // Список полей для перевода
    $fields_to_translate = array('_custom_instructions', '_custom_notes');

    if ( in_array( $meta_key, $fields_to_translate ) && !empty($value) ) {
        $current_lang = apply_filters('wpml_current_language', null); // или polylang function

        // Проверяем, есть ли уже перевод в БД
        $translated_value = get_post_meta( $object_id . '_' . $current_lang, $meta_key, true );
        if ( $translated_value ) {
            return $translated_value;
        }

        // Если нет, делаем автоперевод через API
        $translated_value = my_autotranslate_api_call( $value, $current_lang );

        // Сохраняем перевод для кеша
        update_post_meta( $object_id . '_' . $current_lang, $meta_key, $translated_value );

        return $translated_value;
    }

    return $value;
}
add_filter( 'get_post_metadata', 'wc_autotranslate_custom_fields', 10, 4 );

Пример функции отправки текста на автоперевод (используйте ваш API ключ и URL):

function my_autotranslate_api_call( $text, $lang ) {
    // Заготовка для API вызова, замените на реальный
    $api_url = 'https://api.example.com/translate';
    $response = wp_remote_post( $api_url, array(
        'body' => json_encode(array('text' => $text, 'target_lang' => $lang)),
        'headers' => array('Content-Type' => 'application/json')
    ));

    if ( is_wp_error( $response ) ) {
        return $text; // Возвращаем оригинал при ошибке
    }

    $data = json_decode( wp_remote_retrieve_body( $response ), true );
    return $data['translated_text'] ?? $text;
}

3. Подключите перевод к выводу в шаблоне

В файлах темы, где выводятся пользовательские поля, убедитесь, что используется get_post_meta() (или аналог) — тогда фильтр выше сработает и подставит переведённый текст.

Проверка результата после внедрения

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

Частые ошибки и как их исправить

  • Перевод не отображается на фронтенде. Проверьте, что вы используете get_post_meta() для вывода, а не get_post_custom() или прямой доступ к базе.
  • Перевод повторно запрашивается при каждой загрузке. Убедитесь, что функция сохраняет перевод в метаданные с суффиксом языка.
  • Неправильное определение языка. Вызов apply_filters('wpml_current_language', null) для WPML или pll_current_language() для Polylang обязателен, иначе API переводит в неправильный язык.
  • Ошибка при вызове API. Добавьте обработку ошибок и fallback на оригинальный текст.

Практические советы по безопасности и производительности

  • Для снижения количества запросов к API автоперевода используйте кеширование результатов в метаданных товаров.
  • Ограничьте список полей для перевода, чтобы не нагружать систему лишними вызовами.
  • Обязательно реализуйте проверку ошибок и fallback, чтобы не выводить пустые или некорректные тексты.
  • Используйте WordPress Cron или WP-CLI для пакетного перевода всех товаров заранее, чтобы избежать задержек при загрузке страниц.

Сравнение вариантов реализации автоперевода пользовательских полей WooCommerce

МетодПлюсыМинусыКогда использовать
Фильтр get_post_metadata + API автопереводаАвтоматический, нет ручного перевода, кешированиеЗависимость от внешнего API, возможны задержкиМного товаров, требуется быстрый запуск
Ручной перевод через админку WooCommerce + PolylangКонтроль качества переводаТрудозатратно, не масштабируетсяНебольшой каталог, важен точный перевод
Пакетный автоперевод через WP-CLIПеревод без задержек на фронтендеТребует доступа к серверу, планирование задачБольшие магазины, оптимизация производительности
Автоматический перевод описаний товаров WooCommerce: пошаговое руководство
26.04.2026
Как добавить автоперевод в WP Remark для WordPress
29.01.2026
Перевод статусов заказов WooCommerce: практическое руководство
21.05.2026
Как использовать REST API для автоперевода контента WordPress
03.06.2026
Как автоматически переводить контент WordPress с помощью API DeepL
25.03.2026