Диагностика проблемы: почему атрибуты товаров 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 перевода | Контроль, можно адаптировать под задачи | Требует разработки, нагрузка на сервер |
| Ручной перевод атрибутов | Точный и осмысленный перевод | Трудоемко, не подходит для большого каталога |