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

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

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

  • Атрибуты отображаются на всех языках на оригинальном языке;
  • При автопереводе описание или название атрибута не меняются;
  • Переводы атрибутов не попадают в поисковую индексацию;
  • Ссылки на архивы атрибутов ведут на неверный язык.

Для диагностики проверьте, что атрибуты созданы как таксономии WooCommerce (wp_terms, wp_term_taxonomy) и не хранятся в произвольных полях.

Почему автоперевод атрибутов WooCommerce требует отдельной настройки

Атрибуты — это не просто текстовые поля, а объекты с названием, описанием и слагом. Стандартные автопереводчики обычно работают с контентом постов и страниц, но не всегда умеют обрабатывать таксономии WooCommerce. Потому нужно прописать явный вызов перевода этих таксономий и записать переведённые значения обратно в базу.

Типичные сценарии использования

  • Перевод названий атрибутов (например, «Цвет» -> «Color»).
  • Перевод значений атрибутов (например, «Красный» -> «Red»).
  • Перевод описаний атрибутов, которые отображаются в фильтрах или на страницах товаров.

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

1. Получение списка атрибутов и их терминов

Используем стандартные функции WooCommerce для получения атрибутов и терминов:

$attributes = wc_get_attribute_taxonomies();
foreach ( $attributes as $attribute ) {
    $taxonomy = wc_attribute_taxonomy_name( $attribute->attribute_name );
    $terms = get_terms( array('taxonomy' => $taxonomy, 'hide_empty' => false) );
    // далее обрабатываем термины
}

2. Интеграция с автопереводчиком (пример с Google Translate API)

Вызов API перевода для названий и описаний терминов. Пример минимальной функции автоперевода:

function translate_text_google( $text, $target_lang ) {
    $api_key = 'ВАШ_GOOGLE_API_КЛЮЧ';
    $url = 'https://translation.googleapis.com/language/translate/v2?key=' . $api_key;
    $data = array(
        'q' => $text,
        'target' => $target_lang,
        'format' => 'text'
    );
    $response = wp_remote_post( $url, array(
        'body' => json_encode( $data ),
        'headers' => array('Content-Type' => 'application/json')
    ));
    if ( is_wp_error( $response ) ) {
        return false;
    }
    $body = json_decode( wp_remote_retrieve_body( $response ), true );
    return $body['data']['translations'][0]['translatedText'] ?? false;
}

3. Обновление переведённых значений в таксономиях WooCommerce

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

foreach ( $terms as $term ) {
    $new_name = translate_text_google( $term->name, 'en' ); // пример перевода на английский
    $new_description = translate_text_google( $term->description, 'en' );
    if ( $new_name ) {
        wp_update_term( $term->term_id, $taxonomy, array(
            'name' => $new_name,
            'description' => $new_description
        ));
    }
}

4. Автоматизация процесса через wp-cron

Чтобы не выполнять перевод вручную, создайте cron-задачу:

if ( ! wp_next_scheduled( 'auto_translate_woocommerce_attributes' ) ) {
    wp_schedule_event( time(), 'daily', 'auto_translate_woocommerce_attributes' );
}
add_action( 'auto_translate_woocommerce_attributes', 'auto_translate_attributes_callback' );

function auto_translate_attributes_callback() {
    // ваш код из шага 1-3
}

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

  • Перейдите в админку WooCommerce > Атрибуты, проверьте, что названия и описания атрибутов переведены.
  • Посмотрите на странице товара, что атрибуты отображаются на нужном языке.
  • Используйте локальный переключатель языка (если есть) и убедитесь, что слаги и описания изменяются.
  • Проверьте в базе данных таблицы wp_terms и wp_term_taxonomy — переводы должны сохраниться там.

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

  • Ошибка: Перевод не сохраняется в базе.
    Причина: Использование wp_update_term без правильных прав или конфликт плагинов.
    Решение: Проверьте права пользователя и отключите плагины, которые могут блокировать изменения таксономий.
  • Ошибка: Атрибуты показываются на одном языке во фронтенде.
    Причина: Кэширование страниц или отсутствие поддержки мультиязычности у темы.
    Решение: Очистите кэш, проверьте поддержку темы и правильность переключателя языка.
  • Ошибка: Перевод текста возвращается как HTML-сущности.
    Причина: Некорректная обработка response API.
    Решение: Используйте html_entity_decode() для переведённого текста перед сохранением.

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

  • Ограничьте частоту вызова API перевода, чтобы не превысить лимиты и не получить блокировку.
  • Кешируйте результаты перевода в отдельном transient или таблице для повторных вызовов.
  • Обрабатывайте ошибки API корректно, чтобы не ломать работу сайта.
  • Используйте nonce и права доступа при запуске крон-задач для безопасности.
  • Для больших магазинов разбивайте перевод по партиям — это снизит нагрузку на сервер.

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

ПодходПлюсыМинусыПример
Плагин автоперевода (WPML, Polylang)Простая установка, поддержка интерфейсаПлатно, может не перевести кастомные поляWPML с модулем для WooCommerce
Ручной перевод терминовТочный контрольТрудозатратно, не подходит для больших магазиновРедактирование в админке
Кастомный скрипт с API Google TranslateАвтоматизация, гибкостьТребует навыков программирования, расходы на APIКод из этой статьи
Как сделать перевод административной панели WordPress на русский язык
06.01.2026
Как добавить автоперевод форм в WordPress
16.01.2026
Как передавать текст в автопереводчик в WordPress через хуки
26.02.2026
Как автоматически переводить сообщения об ошибках в WordPress
22.03.2026
Автоматический перевод описаний товаров WooCommerce в WordPress: практическое руководство
23.04.2026