Проблема: почему атрибуты WooCommerce не переводятся автоматически
При работе с многоязычными интернет-магазинами на WooCommerce часто возникает необходимость перевести не только описания и названия товаров, но и их атрибуты (цвет, размер, материал и т.п.). По умолчанию WooCommerce не переводит атрибуты автоматически, даже если используется мультиязычный плагин. Они остаются на основном языке, что ухудшает пользовательский опыт и мешает SEO.
Основные причины:
- Атрибуты и их термины хранятся в отдельной таксономии
pa_{attribute_name}и требуют отдельного перевода. - Мультиязычные плагины часто не интегрируются с пользовательскими таксономиями WooCommerce по умолчанию.
- Автоматический перевод атрибутов требует программной обработки или использования специальных плагинов с API переводов.
Как проверить, что атрибуты действительно не переведены
1. В админке WordPress перейдите в Товары > Атрибуты, выберите нужный атрибут.
2. Нажмите на просмотр терминов (значения атрибута) и убедитесь, что они отображаются только на основном языке.
3. На фронтенде переключитесь на другой язык и проверьте отображение атрибутов в карточках товаров — они останутся на исходном языке.
Пошаговое решение: автоматический перевод атрибутов WooCommerce с помощью PHP и API перевода
1. Подключение к API перевода
В примере используем Google Translate API (Google Cloud Translation API). Для работы вам нужен ключ API с включенным сервисом Cloud Translation.
function translate_text_google_api($text, $target_lang) {
$apiKey = 'ВАШ_GOOGLE_API_KEY';
$url = 'https://translation.googleapis.com/language/translate/v2?key=' . $apiKey;
$data = [
'q' => $text,
'target' => $target_lang,
'format' => 'text'
];
$response = wp_remote_post($url, [
'body' => json_encode($data),
'headers' => [
'Content-Type' => 'application/json'
]
]);
if (is_wp_error($response)) {
return false;
}
$body = json_decode(wp_remote_retrieve_body($response), true);
return $body['data']['translations'][0]['translatedText'] ?? false;
}2. Получение терминов атрибута и перевод
Используем хук для перевода терминов при сохранении атрибута или через отдельную функцию для массового перевода.
function translate_woocommerce_attribute_terms($attribute_slug, $target_lang) {
$taxonomy = 'pa_' . $attribute_slug;
$terms = get_terms(['taxonomy' => $taxonomy, 'hide_empty' => false]);
foreach ($terms as $term) {
$translated_name = translate_text_google_api($term->name, $target_lang);
if ($translated_name) {
// Создаем перевод как новый термин с суффиксом языка
$translated_term_slug = $term->slug . '-' . $target_lang;
if (!term_exists($translated_term_slug, $taxonomy)) {
wp_insert_term($translated_name, $taxonomy, ['slug' => $translated_term_slug]);
}
// Здесь можно связать оригинальный и переведенный термин через мета или сторонний механизм
}
}
}3. Вызов функции для нужного атрибута и языка
add_action('init', function() {
if (is_admin()) {
// Переводим атрибут 'color' на английский
translate_woocommerce_attribute_terms('color', 'en');
}
});Как проверить, что перевод атрибутов сработал
- Зайдите в админку > Товары > Атрибуты > Термины соответствующего атрибута.
- Убедитесь, что появились новые термины с переводом и суффиксом языка в слаге.
- На фронтенде переключитесь на язык перевода и проверьте отображение атрибутов в карточках товаров.
- Если используете кеш, очистите его после внесения изменений.
Частые ошибки и как их исправить
- Ошибка: Нет перевода терминов или они дублируются.
Причина: Не настроена логика связи оригинальных терминов с переводами.
Решение: Используйте метаполя для связи или мультиязычные плагины с поддержкой терминов. - Ошибка: API переводов возвращает ошибки или лимиты.
Причина: Превышение квоты Google API, неправильный ключ.
Решение: Проверьте ключ, лимиты и логи ошибок wp_remote_post. - Ошибка: Переводы не отображаются на сайте.
Причина: Кеширование, неправильное отображение терминов.
Решение: Очистите кеш, проверьте шаблоны вывода атрибутов.
Практические советы по оптимизации и безопасности
- Не вызывайте массовый перевод терминов на каждом запросе — ограничьте вызов через админский триггер или CRON.
- Кэшируйте результаты перевода, например, в метаполях терминов, чтобы не обращаться к API при каждом выводе.
- Обрабатывайте ошибки API, чтобы не блокировать загрузку сайта.
- Используйте безопасное хранение и ограничьте доступ к API-ключам.
- Для SEO лучше использовать отдельные URL с переводами атрибутов, чтобы поисковики индексировали правильные версии.
Сравнение методов автоматического перевода атрибутов WooCommerce
| Метод | Плюсы | Минусы |
|---|---|---|
| Ручной перевод терминов | Точный контроль, без затрат на API | Трудоемко, плохо масштабируется |
| Автоматический перевод через Google API + кастомный скрипт | Автоматизация, быстрое обновление | Стоимость API, возможные ошибки перевода |
| Использование мультиязычных плагинов (WPML, Polylang) | Готовое решение, поддержка терминов | Платные, нагрузка на сайт |