Диагностика проблемы с переводом атрибутов WooCommerce
Атрибуты и характеристики товаров в WooCommerce часто остаются непереведёнными при использовании автоматических переводчиков или даже ручного перевода. Это происходит из-за того, что атрибуты хранятся в таксономиях и метаданных, которые не всегда обрабатываются стандартными плагинами перевода. В результате на многоязычных сайтах появляется несогласованный или неполный интерфейс для пользователя.
Для диагностики проблемы проверьте, как именно выводятся атрибуты на фронтенде и в админке, и сравните их перевод для разных языков. Используйте следующие инструменты:
- WPML String Translation или Polylang String Translation — проверить, видны ли атрибуты в списке переводимых строк.
- Отладка с помощью
var_dump(get_the_terms($product_id, 'pa_color'));для конкретного атрибута. - Проверка таблиц базы данных
wp_woocommerce_attribute_taxonomiesиwp_termsна наличие переведённых терминов.
Пошаговое решение автоматического перевода атрибутов WooCommerce
1. Подключение API перевода (Google Translate, DeepL)
Для автоматизации перевода атрибутов нужно использовать API внешних сервисов. Пример функции для перевода текста через Google Translate API:
function translate_text_google($text, $target_lang) {
$apiKey = 'ВАШ_GOOGLE_API_KEY';
$url = 'https://translation.googleapis.com/language/translate/v2?key=' . $apiKey;
$data = [
'q' => $text,
'target' => $target_lang,
];
$response = wp_remote_post($url, [
'body' => json_encode($data),
'headers' => [
'Content-Type' => 'application/json',
],
]);
if (is_wp_error($response)) {
return $text;
}
$body = json_decode(wp_remote_retrieve_body($response), true);
return $body['data']['translations'][0]['translatedText'] ?? $text;
}2. Получение списка атрибутов и терминов для перевода
WooCommerce хранит атрибуты в таблице wp_woocommerce_attribute_taxonomies, а термины - в таксономиях с префиксом pa_. Для перевода нужно получить все термины атрибутов и применить к ним перевод.
$attribute_taxonomies = wc_get_attribute_taxonomies();
foreach ($attribute_taxonomies as $attribute) {
$taxonomy = wc_attribute_taxonomy_name($attribute->attribute_name);
$terms = get_terms(['taxonomy' => $taxonomy, 'hide_empty' => false]);
foreach ($terms as $term) {
// Здесь будет логика перевода $term->name
}
}3. Создание функции обновления переведённых терминов
Создадим функцию, которая обновит название термина и описание на нужном языке. Для мультиязычности можно использовать плагин Polylang или WPML, где переводы терминов хранятся отдельно.
function update_term_translation($term_id, $translated_name, $translated_description = '') {
wp_update_term($term_id, '', [
'name' => $translated_name,
'description' => $translated_description,
]);
}Для WPML можно использовать API icl_register_string и icl_t, для Polylang — функции pll_get_term, pll_set_term_language и создание переводов терминов.
Проверка результата после внедрения
Проверьте, что на фронтенде в интерфейсе товара атрибуты отображаются на нужном языке. Сделайте переключение языка и убедитесь, что:
- Названия атрибутов и терминов переведены.
- Описание атрибутов (если используется) тоже отображается корректно.
- В админке WooCommerce и в списках терминов переводы видны и редактируются.
Для теста можно использовать код:
$terms = get_the_terms($product_id, 'pa_color');
foreach ($terms as $term) {
echo 'Атрибут цвет: ' . esc_html($term->name) . '<br>';
}Частые ошибки и как их исправить
- Переводы не отображаются на фронтенде — проверьте, что тема и WooCommerce выводят атрибуты через стандартные функции, а не через кастомный код, который не учитывает локализацию.
- Термины не переводятся, потому что используются в одном языке — при использовании WPML или Polylang для терминов нужно создавать переводы терминов, а не просто обновлять одно имя.
- API переводчика возвращает ошибку — проверьте корректность ключа API, лимиты запросов, формат запроса и обработку ошибок.
Практические советы по безопасности и производительности
- Кэшируйте результаты автоматического перевода, чтобы не делать повторные запросы к API.
- Не храните ключ API в коде — используйте
wp-config.phpили переменные окружения. - Обрабатывайте ошибки API с возвратом исходного текста, чтобы избежать потери данных.
- Используйте хук
shutdownили WP-Cron для пакетного перевода атрибутов, чтобы не блокировать загрузку страниц.
Сравнение способов перевода атрибутов WooCommerce
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Ручной перевод через WPML/Polylang | Точный, полный контроль | Долго, трудоёмко | Небольшие сайты, важна точность |
| Автоматический перевод через API (Google, DeepL) | Быстро, масштабируемо | Зависит от качества API, возможны ошибки | Большие каталоги, частые обновления |
| Использование готовых плагинов перевода WooCommerce | Простота внедрения | Может не поддерживать все атрибуты | Стандартные сайты без кастомных атрибутов |