Диагностика проблемы автоперевода атрибутов и вариантов товаров в WooCommerce
Если в вашем многоязычном магазине WooCommerce атрибуты товаров (например, цвет, размер) и их варианты не переводятся автоматически, несмотря на подключенный плагин автоперевода (например, WPGPT), нужно проверить несколько ключевых моментов:
- Правильно ли подключены хуки для автоперевода именно атрибутов и терминов таксономии?
- Передаются ли данные атрибутов в функцию автоперевода в нужном формате?
- Зарегистрированы ли атрибуты как переводимые в плагине мультиязычности (WPML, Polylang, WPLangs и др.)?
- Нет ли конфликтов с кэшированием, которые мешают обновлению перевода?
- Используется ли правильный приоритет вызова функций для перехвата атрибутов и вариантов на этапе сохранения/обновления товара?
Проверка регистрации атрибутов как переводимых
В админке WooCommerce зайдите в Товары > Атрибуты. Убедитесь, что для каждого атрибута включена поддержка перевода в вашем мультиязычном плагине.
Если используется WPML, например, перейдите WPML > Настройки > Таксономии и проверьте, что атрибуты (product attributes) отмечены как «переводимые».
Пошаговое решение проблемы автоперевода атрибутов и вариантов
1. Добавьте перехватчик сохранения атрибутов для запуска автоперевода
Для автоматического запуска перевода при обновлении товара можно использовать хук woocommerce_save_product_variation и save_post_product для самих товаров:
add_action('woocommerce_save_product_variation', 'auto_translate_product_variation', 20, 2);
add_action('save_post_product', 'auto_translate_product_attributes', 20, 3);
function auto_translate_product_variation($variation_id, $i) {
$variation = wc_get_product($variation_id);
$attributes = $variation->get_attributes();
foreach ($attributes as $name => $value) {
// Запускаем автоперевод значения атрибута
$translated_value = my_autotranslate_function($value);
// Обновляем значение атрибута вариации
$variation->set_attribute($name, $translated_value);
}
$variation->save();
}
function auto_translate_product_attributes($post_id, $post, $update) {
if ($post->post_type !== 'product') return;
$product = wc_get_product($post_id);
$attributes = $product->get_attributes();
foreach ($attributes as $attr_name => $attr_obj) {
if ($attr_obj->is_taxonomy()) {
$terms = wp_get_post_terms($post_id, $attr_obj->get_name());
foreach ($terms as $term) {
$translated_name = my_autotranslate_function($term->name);
wp_update_term($term->term_id, $term->taxonomy, ['name' => $translated_name]);
}
} else {
$translated_value = my_autotranslate_function($attr_obj->get_options()[0]);
$attr_obj->set_options([$translated_value]);
}
}
$product->save();
}
// Пример простой функции автоперевода (замените на реальный вызов API или плагина)
function my_autotranslate_function($text) {
// здесь вызов вашего сервиса перевода, например WPGPT
return $text . ' (перевод)';
}2. Очистите кэш и обновите переводы
После внесения изменений очистите кэш сайта (если используете кеширующие плагины) и CDN. Затем откройте страницу товара в админке и сохраните его заново, чтобы триггерить автоперевод.
3. Проверьте правильность хранения переводов в базе
В базе данных таблице wp_term_taxonomy и wp_terms должны появиться обновленные имена терминов с переводами. Аналогично, метаполя товаров должны обновиться.
Проверка результата после внедрения автоперевода атрибутов
- Откройте страницу товара в админке, проверьте, что атрибуты и варианты отображаются с переведенными значениями.
- Переключитесь на другой язык на фронтенде, убедитесь, что атрибуты и варианты подгружаются с переводом.
- Проверьте исходный код страницы на наличие переведенных терминов.
- Для отладки можно временно добавить логирование в функции автоперевода, например через
error_log().
Частые ошибки и способы их исправления
- Атрибуты не отмечены как переводимые в мультиязычном плагине. Проверьте настройки WPML/Polylang/WPLangs и включите перевод атрибутов.
- Функция автоперевода вызывается с неправильными параметрами. Убедитесь, что вы передаете корректные значения терминов и строк в функцию перевода.
- Кэш не сбрасывается, старые данные показываются на фронтенде. Очистите кэш плагинов и серверный кэш.
- Перевод не сохраняется в базе. Проверьте права пользователя и возможность обновления терминов через
wp_update_term().
Практические советы по безопасности и производительности
- Не запускайте автоперевод при каждом сохранении без условий, чтобы избежать излишней нагрузки и лимитов API.
- Используйте transientы или опции для кеширования результатов перевода.
- Проверяйте права доступа перед изменением терминов, чтобы не допустить перезаписи системных данных.
- Логируйте ошибки и результаты перевода для отладки и мониторинга.
Сравнение способов реализации автоперевода атрибутов WooCommerce
| Метод | Плюсы | Минусы |
|---|---|---|
| Плагин автоперевода с поддержкой WooCommerce | Готовое решение, интеграция с API перевода | Может не охватывать все атрибуты, платный функционал |
| Кастомный хук на сохранение товаров (код) | Гибкость, полный контроль, можно оптимизировать | Требует навыков разработки, возможны ошибки |
| Ручной перевод атрибутов в админке | Точный контроль над переводом | Затратно по времени, не масштабируется |