Диагностика проблемы с переводом атрибутов и вариантов товаров в WooCommerce
При создании многоязычного интернет-магазина на WooCommerce часто сталкиваются с проблемой: атрибуты товаров и их варианты остаются на исходном языке и не переводятся автоматически. Это негативно влияет на пользовательский опыт и SEO, особенно если магазин ориентирован на международную аудиторию.
Основные признаки проблемы:
- Атрибуты товаров отображаются только на одном языке в карточках товара.
- Варианты (например, размеры, цвета) не переводятся или отображаются некорректно.
- При использовании автоматического перевода контента атрибуты остаются без перевода.
Пошаговое решение: как перевести атрибуты и варианты товаров с помощью хуков WooCommerce
1. Используем фильтр woocommerce_product_variation_get_attribute для перевода вариантов атрибутов
Этот фильтр позволяет изменить значение атрибута варианта прямо при его выводе. Подключаем автоматический перевод через API (например, Google Translate) или локальный словарь.
add_filter('woocommerce_product_variation_get_attribute', 'auto_translate_variation_attribute', 10, 3);
function auto_translate_variation_attribute($value, $attribute_name, $variation) {
// Пример использования локального словаря переводов
$translations = [
'size' => [
'Small' => 'Маленький',
'Medium' => 'Средний',
'Large' => 'Большой'
],
'color' => [
'Red' => 'Красный',
'Blue' => 'Синий'
]
];
$attribute_key = str_replace('attribute_pa_', '', $attribute_name);
if (isset($translations[$attribute_key][$value])) {
return $translations[$attribute_key][$value];
}
return $value;
}2. Перевод названий атрибутов в карточках и списках товаров
Для перевода названий атрибутов используем фильтр woocommerce_attribute_label. Он позволяет изменить выводимый лейбл атрибута.
add_filter('woocommerce_attribute_label', 'auto_translate_attribute_label', 10, 2);
function auto_translate_attribute_label($label, $name) {
$labels_translation = [
'pa_size' => 'Размер',
'pa_color' => 'Цвет'
];
if (isset($labels_translation[$name])) {
return $labels_translation[$name];
}
return $label;
}Проверка результата после внедрения
1. Откройте карточку товара с вариациями и атрибутами на фронтенде.
2. Убедитесь, что названия атрибутов и их варианты отображаются на нужном языке (например, "Размер" вместо "Size" и "Маленький" вместо "Small").
3. Проверьте несколько товаров с разными атрибутами.
4. Используйте инструменты разработчика браузера, чтобы проверить, что фильтры действительно применяются (например, смотрите исходный HTML или отладочную информацию).
Частые ошибки и как их исправить
- Фильтры не работают: Проверьте, что код добавлен в functions.php вашей темы или в плагин, и что он выполняется до вывода страницы.
- Неправильные имена атрибутов: WooCommerce использует префикс
pa_для глобальных атрибутов, убедитесь, что ключи словаря соответствуют именно этим именам (например,pa_size,pa_color). - Перевод не применяется к вариациям: Фильтр
woocommerce_product_variation_get_attributeработает только для вариаций. Для других случаев нужно использовать другие хуки. - Проблемы с кешированием: Очистите кеш сайта и браузера после внесения изменений.
Практические советы по оптимизации и безопасности
- Если используете API перевода (Google Translate, DeepL), кэшируйте результаты перевода в transient или метаданных, чтобы снизить количество запросов и ускорить загрузку.
- Избегайте выполнения HTTP-запросов в фильтрах, которые вызываются часто — это замедляет сайт.
- Храните словари переводов в виде массива в отдельном PHP-файле для удобного редактирования и масштабирования.
- Используйте строгие проверки входных данных и избегайте инъекций при работе с динамическими API.
Сравнение подходов к переводу атрибутов WooCommerce
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
Перевод через хуки (напр., woocommerce_product_variation_get_attribute) | Автоматическая подмена текста при выводе | Легко интегрировать, не требует изменения базы данных | Перевод на лету, возможна нагрузка на сайт при внешних API |
| Ручной перевод атрибутов в админке WooCommerce | Создание переведенных атрибутов и вариантов вручную | Надежно, SEO-дружественно, нет дополнительной нагрузки | Трудозатратно, сложно масштабировать |
| Использование плагинов для многоязычности (WPML, Polylang) | Полноценная поддержка переводов с UI | Удобно, много функций | Стоимость, сложность настройки, нагрузка на сайт |