Как автоматически перевести метаданные товаров WooCommerce в WordPress

Проблема: почему метаданные товаров WooCommerce не переводятся автоматически

WooCommerce хранит ключевую информацию о товарах не только в стандартных полях, но и в метаданных (custom fields). Обычно плагины автоперевода переводят только контент и стандартные поля, игнорируя метаданные, что приводит к неполноценному мультиязычному сайту. Это особенно критично для атрибутов, описаний, инструкций и пользовательских настроек, которые часто передаются через метаданные.

Диагностика проблемы

  • Проверьте, отображаются ли переводы метаданных на странице товара в другом языке.
  • Используйте инструменты разработчика, чтобы увидеть, какие поля выводятся, и сопоставьте их с базой данных в таблице wp_postmeta.
  • Убедитесь, что используемый плагин перевода поддерживает работу с метаданными WooCommerce.

Пошаговое решение: автоматический перевод метаданных товаров WooCommerce

1. Определяем метаданные для перевода

Чаще всего метаданные для перевода — это _sku (артикул), _product_attributes, _wpml_media_duplicate (если используется WPML), а также любые произвольные поля, добавленные темой или плагинами.

2. Используем хук save_post_product для запуска перевода

Добавим обработчик, который при сохранении товара инициирует перевод нужных метаданных через API автоперевода (например, DeepL или Google Translate).

add_action('save_post_product', 'auto_translate_product_meta', 20, 3);
function auto_translate_product_meta($post_ID, $post, $update) {
    // Проверяем, что это обновление, а не первое сохранение
    if (!$update) return;

    // Получаем исходный язык
    $source_lang = 'en'; // задайте исходный язык
    $target_lang = 'ru'; // язык перевода

    // Метаданные для перевода
    $meta_keys = ['custom_description', 'material_info'];

    foreach ($meta_keys as $key) {
        $original_text = get_post_meta($post_ID, $key, true);
        if ($original_text) {
            $translated_text = my_translate_text($original_text, $source_lang, $target_lang);
            update_post_meta($post_ID, $key . '_translated_' . $target_lang, $translated_text);
        }
    }
}

function my_translate_text($text, $source, $target) {
    // Пример вызова API перевода (Google Translate)
    $api_key = 'YOUR_API_KEY';
    $url = 'https://translation.googleapis.com/language/translate/v2?key=' . $api_key;

    $data = [
        'q' => $text,
        'source' => $source,
        'target' => $target,
        'format' => 'text'
    ];

    $response = wp_remote_post($url, [
        'body' => json_encode($data),
        'headers' => ['Content-Type' => 'application/json']
    ]);

    if (is_wp_error($response)) return '';

    $body = json_decode(wp_remote_retrieve_body($response), true);
    return $body['data']['translations'][0]['translatedText'] ?? '';
}

3. Выводим переведённые метаданные на фронтенде

В шаблоне товара добавьте проверку и вывод переведённого текста:

$translated_desc = get_post_meta(get_the_ID(), 'custom_description_translated_ru', true);
if ($translated_desc) {
    echo esc_html($translated_desc);
} else {
    echo esc_html(get_post_meta(get_the_ID(), 'custom_description', true));
}

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

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

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

  • Перевод не запускается при сохранении товара: возможно, приоритет хука слишком низкий или плагин кеширования блокирует выполнение. Проверьте, отключите кеширование на время теста.
  • API перевода возвращает ошибку: проверьте корректность API ключа и лимиты запросов, а также формат запросов.
  • Переводы не отображаются на сайте: убедитесь, что шаблон выводит именно переведённые метаданные, а не оригинальные.
  • Слишком много запросов к API: реализуйте кеширование переводов в метаданных и отложенное выполнение через WP Cron.

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

  • Не храните открытые API ключи в коде — используйте wp-config.php или переменные окружения.
  • Добавьте проверку nonce и прав пользователя при сохранении товаров, чтобы исключить несанкционированный вызов автоперевода.
  • Используйте асинхронное выполнение перевода через WP Cron, чтобы не замедлять сохранение товара.
  • Кешируйте переводы в метаданных, чтобы избежать повторных вызовов API.
  • Контролируйте лимиты API и логи ошибок для своевременного реагирования.

Сравнение подходов к переводу метаданных WooCommerce

МетодПлюсыМинусыКомпромисс
Использование плагинов автоперевода (WPML, TranslatePress) Простота установки, поддержка UI Не всегда переводят метаданные, ограниченный контроль Использовать дополнительно кастомный код для метаданных
Кастомный код с API перевода Полный контроль, гибкость Требует разработки, настройка API Автоматизировать через WP Cron и кеширование
Ручной перевод через админку Точность, отсутствие ошибок API Высокий трудозатрат, не подходит для большого каталога Использовать для важных метаданных, остальное автоматизировать
Как добавить автоперевод сообщений об ошибках в WordPress
19.01.2026
Как использовать хук wptranslate_autotranslate для автоперевода текстов в WordPress
28.03.2026
Автоматический перевод описаний товаров WooCommerce в WordPress: практическое руководство
23.04.2026
Как настроить передачу языка в WordPress для автоперевода
31.03.2026
Как использовать REST API WordPress для автоперевода контента
11.04.2026