wplangs.ru wordpress WP Langs

WooCommerce: как использовать хуки для автоперевода атрибутов и вариантов товаров

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

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

Для диагностики:

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

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

Основные хуки, на которые стоит обратить внимание:

  • woocommerce_product_option_terms — для фильтрации вариантов атрибутов перед выводом.
  • woocommerce_attribute_label — для перевода названия атрибута.
  • woocommerce_variation_option_name — для перевода варианта атрибута (например, цветов).
  • save_post_product — для запуска автоперевода атрибутов при сохранении товара.

Пример автоперевода варианта атрибута через хук woocommerce_variation_option_name

add_filter('woocommerce_variation_option_name', 'auto_translate_variation_option', 10, 1);
function auto_translate_variation_option( $term_name ) {
    // Здесь вызываем ваш автопереводчик, например, через API
    // Для примера заменим слово «Red» на «Красный»
    if ( $term_name === 'Red' ) {
        return 'Красный';
    }
    return $term_name;
}

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

add_action('save_post_product', 'auto_translate_product_attributes', 20, 3);
function auto_translate_product_attributes($post_ID, $post, $update) {
    if ( wp_is_post_revision($post_ID) ) {
        return;
    }

    $product = wc_get_product($post_ID);
    if (!$product) {
        return;
    }

    $attributes = $product->get_attributes();
    $updated = false;

    foreach ($attributes as $attribute_name => $attribute) {
        if ($attribute->is_taxonomy()) {
            $terms = wp_get_post_terms($post_ID, $attribute->get_name());
            foreach ($terms as $term) {
                $translated_name = my_auto_translate_function($term->name); // ваша функция перевода
                if ($translated_name !== $term->name) {
                    wp_update_term($term->term_id, $attribute->get_name(), ['name' => $translated_name]);
                    $updated = true;
                }
            }
        } else {
            // Перевод для пользовательских атрибутов
            $options = $attribute->get_options();
            $translated_options = [];
            foreach ($options as $option) {
                $translated_options[] = my_auto_translate_function($option);
            }
            $attribute->set_options($translated_options);
            $updated = true;
        }
    }

    if ($updated) {
        $product->save();
    }
}

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

  • Откройте страницу товара на сайте с другим языком — атрибуты и варианты должны отображаться на нужном языке.
  • В админке проверьте, что названия терминов и вариантов атрибутов изменились на переведённые.
  • Для динамического вывода проверьте, что фильтры woocommerce_attribute_label и woocommerce_variation_option_name корректно применяются.
  • Очистите кеш сайта и браузера, если используется кэширование.

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

  • Не вызывается автоперевод при сохранении товара
    Причина: неправильно подключен хук save_post_product или функция не проверяет тип поста.
    Решение: убедитесь в правильности условий и приоритетов хука.
  • Перевод не отображается на фронтенде
    Причина: кеширование или вывод атрибутов происходит до применения фильтров.
    Решение: используйте правильные хуки для вывода, очищайте кеш.
  • Перевод ломает URL атрибутов
    Причина: изменение терминов без обновления ЧПУ.
    Решение: после перевода обновите пермалинки в админке WordPress.
  • Конфликты с другими плагинами перевода
    Причина: одновременное изменение одних и тех же терминов.
    Решение: тестируйте автоперевод отдельно, используйте приоритеты хуков.

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

  • Не переводите атрибуты при каждом сохранении — кешируйте результаты, чтобы снизить нагрузку на базу и API перевода.
  • Используйте транзиенты для хранения переведённых вариантов и названий атрибутов.
  • Обрабатывайте ошибки API перевода, чтобы не прервать сохранение товара.
  • Проверяйте права текущего пользователя перед изменением терминов.

Чек-лист для внедрения автоперевода атрибутов и вариантов WooCommerce

  1. Определить хуки для перевода (вывод и сохранение).
  2. Реализовать функцию автоперевода для отдельных вариантов и атрибутов.
  3. Подключить функции к фильтрам и экшенам WooCommerce.
  4. Тестировать перевод на разных языках и типах атрибутов.
  5. Обновить пермалинки после изменения терминов.
  6. Настроить кеширование и обработку ошибок.

Таблица сравнения способов автоперевода атрибутов и вариантов

МетодПлюсыМинусыПример
Фильтры вывода (например, woocommerce_variation_option_name)Простота внедрения, нет изменения в базеПеревод только для отображения, не сохраняетсяadd_filter('woocommerce_variation_option_name', 'func')
Автоперевод при сохранении товараПеревод сохраняется в базе, SEO-оптимальноРиск ошибок при обновлении терминов, нагрузка при сохраненииadd_action('save_post_product', 'func')
Использование сторонних плагинов перевода с автопереводомГотовые решения, интеграция с WPML, PolylangМожет быть дорого и тяжеловесноWPML, TranslatePress
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше