wplangs.ru wordpress WP Langs

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

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

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

Основные причины:

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

Пошаговое решение: как автоматизировать перевод атрибутов и вариантов WooCommerce

1. Использование хука для перевода атрибутов при сохранении

Добавим фильтр, который при сохранении атрибута автоматически переводит его имя и термины с помощью API перевода (например, Google Translate API или Yandex Translate).

add_action('woocommerce_attribute_added', 'auto_translate_wc_attribute', 10, 2);
function auto_translate_wc_attribute($attribute_id, $data) {
    $taxonomy = wc_attribute_taxonomy_name($data['attribute_name']);
    $terms = get_terms(['taxonomy' => $taxonomy, 'hide_empty' => false]);
    foreach ($terms as $term) {
        $translated_name = my_translate_text($term->name, 'ru', 'en'); // пример перевода с русского на английский
        if ($translated_name && $translated_name !== $term->name) {
            wp_update_term($term->term_id, $taxonomy, ['name' => $translated_name]);
        }
    }
}

// Функция вызова внешнего API перевода
function my_translate_text($text, $source_lang, $target_lang) {
    // Здесь реализуйте вызов API перевода и возвращайте результат
    return $text; // заглушка
}

2. Перевод вариаций товаров при сохранении

Вариации наследуют атрибуты, поэтому нужно перевести метаданные вариаций, чтобы в интерфейсе они отображались на нужном языке.

add_action('save_post_product_variation', 'auto_translate_variation_attributes', 20, 1);
function auto_translate_variation_attributes($variation_id) {
    $variation = wc_get_product($variation_id);
    if (!$variation) return;
    $attributes = $variation->get_attributes();
    $translated_attributes = [];
    foreach ($attributes as $key => $value) {
        $translated_value = my_translate_text($value, 'ru', 'en');
        $translated_attributes[$key] = $translated_value;
    }
    $variation->set_attributes($translated_attributes);
    $variation->save();
}

Проверка результата

Чтобы убедиться, что перевод сработал:

  • В админке WooCommerce зайдите в раздел «Атрибуты» и проверьте, что имена атрибутов и их термины переведены на целевой язык.
  • Создайте или отредактируйте товар с вариациями и убедитесь, что варианты отображаются на нужном языке.
  • На фронтенде переключитесь на другой язык и проверьте, что атрибуты и варианты корректно отображаются.

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

  • Перевод не применяется после сохранения: убедитесь, что функция my_translate_text корректно реализует вызов API перевода и возвращает результат.
  • Атрибуты остаются на исходном языке: проверьте, что используете правильное имя таксономии wc_attribute_taxonomy_name() и получаете все термины.
  • Вариации не обновляются: убедитесь, что сохраняете объект вариации после изменения атрибутов.
  • Большая нагрузка на сервер из-за переводов: используйте кэширование результатов перевода, например, через транзиенты WordPress.

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

  • Не храните API-ключи перевода в открытом виде в коде, используйте define в wp-config.php или параметры в админке.
  • Обрабатывайте переводы в асинхронном режиме через WP Cron или отдельный скрипт, чтобы не замедлять сохранение атрибутов и товаров.
  • Для кэширования перевода используйте set_transient() с уникальным ключом по тексту и языкам.

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

МетодПреимуществаНедостатки
Плагин автоматического перевода (WPML, TranslatePress)Готовое решение, интеграция с WooCommerceПлатные, не всегда переводят атрибуты корректно
Кастомный код с API переводаКонтроль, можно адаптировать под задачиТребует разработки, нагрузка на сервер
Ручной перевод атрибутовТочный и осмысленный переводТрудоемко, не подходит для большого каталога
×
Делай сайт лучше!!

-20% на премиум темы и плагины

Использовать скидку ⋙