Автоматический перевод содержимого WooCommerce с Polylang: практическое руководство

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

Если вы используете Polylang для мультиязычности и столкнулись с тем, что описания товаров, атрибуты или другие данные WooCommerce не переводятся автоматически, вероятно, причина в том, что стандартных настроек Polylang для WooCommerce недостаточно. Поля, относящиеся к товарам, часто хранятся в метаданных, и Polylang не переводит их по умолчанию.

Как проверить, что перевод не работает

  • Перейдите в админку WordPress → Товары → Редактирование товара.
  • Переключитесь на второй язык в редакторе Polylang.
  • Убедитесь, что описание товара (краткое и полное) пустое или не переведено.
  • Проверьте атрибуты товара в переводе — если они на исходном языке, значит автоперевод не сработал.

Пошаговое решение: автоматический перевод описаний товаров с помощью хуков и Google Translate API

1. Подключение Google Translate API

Создайте аккаунт в Google Cloud, активируйте API Cloud Translation и получите API ключ.

2. Добавление функции автоперевода при создании перевода товара

Добавим код в functions.php вашей темы или в кастомный плагин для перевода описания товара при сохранении перевода Polylang.

function wpt_autotranslate_woocommerce_product_description($post_id, $lang) {
    // Проверяем, что это перевод товара
    if ('product' !== get_post_type($post_id)) {
        return;
    }

    // Получаем ID оригинального товара
    $original_id = pll_get_post($post_id, pll_default_language());
    if (!$original_id) {
        return;
    }

    // Получаем оригинальное описание и краткое описание
    $original_content = get_post_field('post_content', $original_id);
    $original_excerpt = get_post_field('post_excerpt', $original_id);

    // Переводим контент
    $translated_content = wpt_google_translate_text($original_content, pll_get_post_language($post_id));
    $translated_excerpt = wpt_google_translate_text($original_excerpt, pll_get_post_language($post_id));

    // Обновляем перевод
    wp_update_post([
        'ID' => $post_id,
        'post_content' => $translated_content,
        'post_excerpt' => $translated_excerpt
    ]);
}
add_action('pll_save_post', 'wpt_autotranslate_woocommerce_product_description', 10, 2);

// Функция отправки текста в Google Translate API
function wpt_google_translate_text($text, $target_lang) {
    if (empty($text)) return '';

    $apiKey = 'ВАШ_API_КЛЮЧ';
    $url = 'https://translation.googleapis.com/language/translate/v2?key=' . $apiKey;

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

    $args = [
        'body' => json_encode($data),
        'headers' => [
            'Content-Type' => 'application/json'
        ],
        'method' => 'POST'
    ];

    $response = wp_remote_post($url, $args);

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

    $body = json_decode(wp_remote_retrieve_body($response), true);

    if (isset($body['data']['translations'][0]['translatedText'])) {
        return $body['data']['translations'][0]['translatedText'];
    }

    return $text;
}

3. Автоматический перевод атрибутов товаров

Атрибуты товаров WooCommerce — таксономии. Для их перевода используем следующий код:

function wpt_translate_woocommerce_attributes_taxonomy($term_id, $lang) {
    $original_term_id = pll_get_term($term_id, pll_default_language());
    if (!$original_term_id) {
        return;
    }

    $term = get_term($original_term_id);
    if (!$term) return;

    $translated_name = wpt_google_translate_text($term->name, $lang);
    $translated_slug = sanitize_title($translated_name);

    wp_update_term($term_id, $term->taxonomy, [
        'name' => $translated_name,
        'slug' => $translated_slug
    ]);
}
add_action('pll_save_term', 'wpt_translate_woocommerce_attributes_taxonomy', 10, 2);

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

  • Создайте новый товар на основном языке.
  • Добавьте описание и атрибуты.
  • Создайте перевод товара через Polylang.
  • После сохранения перевода проверьте, что описание и атрибуты перевелись автоматически.
  • Если переводы появились, значит интеграция работает.

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

  • API ключ Google Translate не работает или превышен лимит: проверьте настройки Google Cloud и квоты.
  • Перевод не срабатывает при сохранении перевода: убедитесь, что функция привязана к правильному хуку pll_save_post и получает правильные параметры.
  • Некорректное отображение перевода: иногда для правильного отображения нужно очистить кэш сайта и браузера.
  • Атрибуты товаров не переводятся: проверьте, что таксономии зарегистрированы для перевода в Polylang и функция подключена к хуку pll_save_term.

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

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

Сравнение вариантов реализации автоперевода WooCommerce с Polylang

МетодПлюсыМинусыКомпромисс
Плагины автоперевода (WPML, TranslatePress) Простота настройки, поддержка WooCommerce Платные, могут замедлять сайт Использовать для крупных проектов
Кастомный автоперевод через Google Translate API + хуки Гибкость, контроль, бесплатный API с лимитами Нужно писать код, возможны ошибки Подходит для опытных разработчиков
Ручной перевод через Polylang Точный перевод, без ошибок API Трудозатратно, не масштабируемо Использовать для небольших каталогов
Как автоматически перевести метаданные в WordPress
02.03.2026
Как сделать автоперевод текстов из произвольных полей в WordPress
05.02.2026
Как исправить проблему с переводом постоянных ссылок (Permalinks) в WordPress
09.12.2025
Как перевести на WordPress пользовательские типы записей и таксономии
03.12.2025
Как создать многоязычный сайт на WordPress с помощью Polylang
09.11.2025