wplangs.ru wordpress WP Langs

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

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

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

  • При обновлении названия или описания атрибута на основном языке переводы не обновляются.
  • Автоматический перевод с помощью плагинов (например, WPML или Polylang) не запускается после изменения характеристик.
  • Переводы создаются вручную, что усложняет масштабирование магазина.

Важный момент — WooCommerce хранит атрибуты как таксономии, что требует особого подхода к обновлению их переводов.

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

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

Кроме того, атрибуты и их термины — это отдельные объекты, у которых свои ID и метаданные. Для корректного обновления переводов нужно:

  • Отслеживать изменения в основной таксономии атрибута.
  • Инициировать автоматический перевод обновленных терминов.
  • Обновлять переводы в базе данных.

Пошаговое решение: реализация автосинхронизации переводов атрибутов WooCommerce

1. Отслеживание изменений атрибутов и терминов

Подключаемся к хукам WordPress, отвечающим за обновление терминов таксономий WooCommerce атрибутов — edited_{$taxonomy}. Например, для атрибута "pa_color" хук будет edited_pa_color.

add_action('edited_pa_color', 'wplangs_sync_attribute_translation', 10, 2);
function wplangs_sync_attribute_translation($term_id, $tt_id) {
    // логика обновления перевода
}

2. Получение данных термина и подготовка для перевода

В функции получаем название и описание термина, которые нужно перевести. Затем вызываем API автоперевода (например, WPGPT или Google Translate API).

function wplangs_sync_attribute_translation($term_id, $tt_id) {
    $term = get_term($term_id);
    if (!$term || is_wp_error($term)) return;

    $text_to_translate = $term->name . '. ' . $term->description;

    // Здесь вызывается функция автоперевода
    $translated_text = my_autotranslate_function($text_to_translate, 'ru', 'en');

    // обновляем перевод термина
    wplangs_update_term_translation($term_id, $translated_text);
}

3. Обновление перевода термина в базе данных

Обновляем переводы с помощью функций плагина перевода (WPML, Polylang) или через собственные механизмы.

function wplangs_update_term_translation($term_id, $translated_text) {
    // пример для WPML
    if (function_exists('icl_object_id')) {
        // определить ID термина перевода
        $translated_term_id = apply_filters('wpml_object_id', $term_id, 'pa_color', false, 'en');
        if ($translated_term_id) {
            wp_update_term($translated_term_id, 'pa_color', array(
                'name' => $translated_text,
                'description' => $translated_text
            ));
        }
    }
}

4. Автоматизация для всех атрибутов

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

function wplangs_register_attribute_hooks() {
    $attribute_taxonomies = wc_get_attribute_taxonomies();
    if (!$attribute_taxonomies) return;

    foreach ($attribute_taxonomies as $attribute) {
        $taxonomy = wc_attribute_taxonomy_name($attribute->attribute_name);
        add_action('edited_' . $taxonomy, 'wplangs_sync_attribute_translation', 10, 2);
    }
}
add_action('init', 'wplangs_register_attribute_hooks');

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

  • Измените название или описание любого атрибута в админке WooCommerce.
  • Подождите несколько секунд для срабатывания автоперевода и обновления.
  • Переключитесь на язык перевода и проверьте, что название и описание атрибута обновились автоматически.
  • Если используется WPML, проверьте таблицы wp_icl_translations и wp_terms на корректность данных.

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

  • Переводы не обновляются после изменения атрибутов: Проверьте, что хуки edited_pa_* правильно добавлены и работают. Ошибка может быть в неправильном названии таксономии.
  • API автоперевода не вызывается или возвращает ошибки: Проверьте ключи API, лимиты запросов, корректность передаваемых данных.
  • Переводы создаются, но не отображаются на сайте: Убедитесь, что используется правильный механизм подгрузки переводов (например, WPML), и переводы связаны с нужной языковой версией.
  • Обновления конфликтуют с другими плагинами перевода: Логируйте вызовы функций и отладочную информацию, чтобы выявить конфликтующие хуки.

Практические советы по оптимизации и безопасности

  • Кэшируйте результаты автоперевода с помощью Transients API, чтобы не перегружать API сервис и снизить задержку.
  • Используйте асинхронные запросы (wp_cron, AJAX) для обновления переводов без блокировки интерфейса.
  • Ограничьте количество символов для перевода, чтобы не превышать лимиты API.
  • Для безопасности храните ключи API в wp-config.php, а не в базе данных или коде темы.
  • Внедрите логирование ошибок перевода для быстрого реагирования на сбои.

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

МетодПлюсыМинусы
Использование хуков и API автоперевода (самостоятельный код)Гибкость, контроль, отсутствие зависимости от плагиновТребует разработки и поддержки, возможны ошибки в интеграции
Плагины типа WPML с ручным обновлениемПростота использования, поддержка разработчикамиОтсутствие автоматизации, возможные задержки
Плагины с автопереводом (WPGPT, TranslatePress)Автоматизация, интеграция с WooCommerceЗависимость от API, стоимость, ограничение по объему
×
Делай сайт лучше!!

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

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