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

Проблема с переводом атрибутов товаров WooCommerce

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

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

Для начала нужно проверить, как именно созданы атрибуты и как они выводятся на сайте. В WooCommerce атрибуты — это таксономии с терминами, зарегистрированные с префиксом pa_. Например, атрибут «Цвет» — pa_color. Перевод терминам нужно делать в базе, а не просто менять текст в шаблонах.

Частые причины проблемы:

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

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

1. Проверка и настройка плагина мультиязычности

Для работы с WooCommerce атрибутами рекомендуем использовать WPML или Polylang с дополнительным модулем для WooCommerce (WooCommerce Multilingual для WPML). Эти плагины умеют переводить атрибуты и синхронизировать их между языками.

Если вы используете WPML, проверьте в админке WPML > Перевод таксономий, что атрибуты WooCommerce (pa_*) отмечены для перевода.

2. Добавление автоматического перевода терминов с помощью API DeepL

Реализуем автоперевод терминов атрибутов при их создании или обновлении с помощью API DeepL. Для этого используем хук created_pa_color (для атрибута color) или универсальный created_{$taxonomy}.

add_action('created_pa_color', 'auto_translate_pa_color_term', 10, 2);
function auto_translate_pa_color_term($term_id, $tt_id) {
    $term = get_term($term_id);
    if (!$term || is_wp_error($term)) return;
    
    $original_name = $term->name;
    $translated_name = deepl_translate($original_name, 'EN'); // Функция отправки запроса к DeepL
    
    // Создаем перевод термина в базе (WPML пример)
    global $sitepress;
    $trid = $sitepress->get_element_trid($term_id, 'tax_pa_color');
    if (!$trid) {
        $sitepress->set_element_language_details($term_id, 'tax_pa_color', NULL, 'ru');
        $trid = $sitepress->get_element_trid($term_id, 'tax_pa_color');
    }
    $sitepress->set_element_language_details(0, 'tax_pa_color', $trid, 'en', $term_id);
    wp_insert_term($translated_name, 'pa_color');
}

function deepl_translate($text, $target_lang) {
    $api_key = 'YOUR_DEEPL_API_KEY';
    $url = 'https://api-free.deepl.com/v2/translate';
    $data = [
        'auth_key' => $api_key,
        'text' => $text,
        'target_lang' => $target_lang
    ];
    $response = wp_remote_post($url, [
        'body' => $data
    ]);
    if (is_wp_error($response)) return '';
    $body = json_decode(wp_remote_retrieve_body($response), true);
    return $body['translations'][0]['text'] ?? '';
}

Для других атрибутов замените pa_color на нужный таксономический префикс.

3. Автоматический перевод уже существующих терминов

Для существующих атрибутов можно создать WP-CLI команду или скрипт, который переберет все термины и создаст переводы, используя вышеописанную функцию deepl_translate.

function auto_translate_all_terms($taxonomy = 'pa_color', $target_lang = 'EN') {
    $terms = get_terms(['taxonomy' => $taxonomy, 'hide_empty' => false]);
    foreach ($terms as $term) {
        $translated = deepl_translate($term->name, $target_lang);
        if ($translated) {
            wp_insert_term($translated, $taxonomy);
        }
    }
}

Как проверить, что атрибуты перевелись

  • В админке WordPress зайдите в «Товары» > «Атрибуты» и переключитесь на язык перевода (если используется WPML/Polylang).
  • Проверьте, что термины в атрибутах отображаются на нужном языке.
  • На фронтенде откройте товар и убедитесь, что атрибуты отображаются на нужном языке.
  • Используйте запросы get_term() с указанием языка (через API плагина мультиязычности) для проверки перевода.

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

  • Переводы не отображаются на фронтенде
    Проверьте, что тема и шаблоны поддерживают мультиязычность. Иногда нужно использовать функции плагина перевода для получения переведенных терминов.
  • Дублирование терминов
    При автоматическом создании переводов может появиться дублирование, если термины уже есть. Добавьте проверку существования термина перед вставкой.
  • API ключ DeepL не работает
    Проверьте правильность ключа и лимиты API, а также обработку ошибок ответа API.
  • Хук не срабатывает для всех атрибутов
    Используйте универсальный хук created_{$taxonomy}, подставляя нужный атрибут.

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

  • Не храните API ключи в коде, лучше использовать define('DEEPL_API_KEY', 'your_key') в wp-config.php или параметры в настройках плагина.
  • Кешируйте результаты перевода, чтобы не делать лишних запросов к API.
  • Ограничьте запуск автоперевода только при создании новых терминов, чтобы не перегружать сервер.
  • Используйте асинхронные запросы или фоновые задачи для массового перевода существующих терминов.

Сравнение вариантов перевода атрибутов WooCommerce

МетодПлюсыМинусы
Ручной перевод через WPML/PolylangПолный контроль, надежностьТрудозатратно при большом количестве терминов
Автоматический перевод через API DeepL (код)Автоматизация, экономия времениЗависимость от API, возможны ошибки перевода
Использование готовых модулей WooCommerce MultilingualИнтеграция с WooCommerce, поддержка атрибутовПлатные решения, требуют настройки
Как добавить поддержку языков в собственном плагине WordPress
02.02.2026
Как настроить передачу языка в WordPress для автоперевода
31.03.2026
Как создать свой плагин для автоперевода WordPress
26.11.2025
Как автоматически переводить контент WordPress с помощью API DeepL
25.03.2026
Как автоматизировать перевод сообщений WordPress через хуки и плагины
13.12.2025