Диагностика проблемы с переводом атрибутов WooCommerce
При создании многоязычного интернет-магазина на WooCommerce часто возникает необходимость перевода не только описаний товаров, но и атрибутов (например, цвет, размер) и вариантов (терминов атрибутов). Без корректного перевода пользовательский интерфейс для покупателей на других языках становится неполноценным, что снижает конверсию. Проблемы обычно проявляются так:
- Атрибуты товаров отображаются только на основном языке.
- Варианты атрибутов (термины) не переводятся и остаются на исходном языке.
- Невозможность автоматически обновлять переводы при добавлении новых терминов.
Почему стандартные инструменты не решают задачу
WooCommerce по умолчанию не имеет встроенного механизма перевода атрибутов и терминов. Для этого используют сторонние плагины многоязычности (WPML, Polylang, TranslatePress), но даже с ними часто приходится вручную создавать переводы терминов атрибутов, что неудобно и занимает время.
Автоматизация перевода через API (например, Google Translate, DeepL) требует программного решения — перехвата создания/обновления терминов и отправки их на перевод с последующим сохранением результата.
Пошаговое решение: автоперевод атрибутов и терминов WooCommerce
1. Подготовка: подключение API перевода
Выберите API перевода, например, Google Translate API или DeepL. Для примера ниже используем Google Translate API с официальной PHP библиотекой.
require_once 'vendor/autoload.php';
use Google\Cloud\Translate\V2\TranslateClient;
$translate = new TranslateClient([
'key' => 'ВАШ_API_КЛЮЧ'
]);2. Отслеживание создания и обновления терминов атрибутов
WooCommerce хранит атрибуты как таксономии с префиксом pa_. Для автоматического перевода можно использовать хук created_term и edited_term, фильтруя по таксономиям атрибутов.
add_action('created_term', 'auto_translate_woocommerce_attribute_term', 10, 3);
add_action('edited_term', 'auto_translate_woocommerce_attribute_term', 10, 3);
function auto_translate_woocommerce_attribute_term($term_id, $tt_id, $taxonomy) {
if (strpos($taxonomy, 'pa_') !== 0) {
return; // Не атрибут
}
$term = get_term($term_id, $taxonomy);
if (!$term) {
return;
}
// Переводим название термина
global $translate;
$target_lang = 'ru'; // Целевой язык, например русский
$translation = $translate->translate($term->name, [
'target' => $target_lang
]);
if (!empty($translation['text'])) {
// Сохраняем перевод как метаданные термина
update_term_meta($term_id, 'translated_name', sanitize_text_field($translation['text']));
// Опционально: заменяем имя термина на перевод (для фронтенда)
// wp_update_term($term_id, $taxonomy, ['name' => $translation['text']]);
}
}3. Отображение переведенных терминов на фронтенде
Чтобы покупатели видели переведенные атрибуты, нужно подменять вывод названия терминов. Например, через фильтр woocommerce_attribute_label или во время вывода атрибутов в шаблонах.
add_filter('woocommerce_attribute_label', 'replace_attribute_label_with_translation', 10, 2);
function replace_attribute_label_with_translation($label, $name) {
$taxonomy = 'pa_' . $name;
$term = get_term_by('slug', $name, $taxonomy);
if (!$term) {
return $label;
}
$translated = get_term_meta($term->term_id, 'translated_name', true);
if (!empty($translated)) {
return $translated;
}
return $label;
}4. Автоматический перевод атрибутов при импорте товаров
Если вы импортируете товары с атрибутами, можно перехватывать процесс импорта и запускать функцию перевода для терминов, чтобы автоматизировать весь процесс.
Проверка результата после внедрения
- Создайте новый атрибут с термином, например, цвет "Blue".
- Проверьте в базе, что для термина появился мета-ключ
translated_nameсо значением на целевом языке. - Откройте страницу товара на сайте — атрибут должен отображаться на целевом языке.
- Проверьте, что при редактировании термина перевод обновляется автоматически.
Частые ошибки и их исправление
- API ключ не работает или ограничен: Проверьте настройки API Google Translate, убедитесь в отсутствии лимитов, корректности ключа.
- Перевод не сохраняется: Убедитесь, что функция
update_term_metaвызывается с корректным ID и что мета-данные не блокируются плагинами кэширования. - Атрибуты не отображаются переведёнными: Проверьте фильтры вывода и убедитесь, что они подключены и приоритеты правильные.
- Конфликты с плагинами многоязычности: Некоторые плагины могут иметь собственные механизмы перевода атрибутов. В этом случае интеграция требует дополнительной настройки.
Практические советы по производительности и безопасности
- Кэшируйте результаты перевода в метаданных терминов, чтобы не вызывать API при каждом запросе.
- Ограничьте вызовы API, чтобы избежать превышения квот, используйте очередь заданий (WP-Cron или сторонние сервисы).
- Храните API ключи в
wp-config.phpили через защищённые переменные окружения, не в коде плагина. - Проверяйте корректность и безопасность входящих данных при сохранении терминов, избегайте XSS.
Сравнение способов перевода атрибутов WooCommerce
| Метод | Плюсы | Минусы |
|---|---|---|
| Ручной перевод через WPML/Polylang | Точный контроль перевода, поддержка SEO | Трудозатратный, неудобен при большом количестве терминов |
| Автоматический перевод через API (код) | Автоматизация, быстрое обновление | Зависимость от качества API, возможные ошибки перевода |
| Использование готовых плагинов автоперевода | Простота установки, интеграция с WooCommerce | Может быть дорого, ограниченные настройки |