Диагностика проблемы с автопереводом атрибутов и вариантов в 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
- Определить хуки для перевода (вывод и сохранение).
- Реализовать функцию автоперевода для отдельных вариантов и атрибутов.
- Подключить функции к фильтрам и экшенам WooCommerce.
- Тестировать перевод на разных языках и типах атрибутов.
- Обновить пермалинки после изменения терминов.
- Настроить кеширование и обработку ошибок.
Таблица сравнения способов автоперевода атрибутов и вариантов
| Метод | Плюсы | Минусы | Пример |
|---|---|---|---|
Фильтры вывода (например, woocommerce_variation_option_name) | Простота внедрения, нет изменения в базе | Перевод только для отображения, не сохраняется | add_filter('woocommerce_variation_option_name', 'func') |
| Автоперевод при сохранении товара | Перевод сохраняется в базе, SEO-оптимально | Риск ошибок при обновлении терминов, нагрузка при сохранении | add_action('save_post_product', 'func') |
| Использование сторонних плагинов перевода с автопереводом | Готовые решения, интеграция с WPML, Polylang | Может быть дорого и тяжеловесно | WPML, TranslatePress |