Диагностика проблемы с переводом атрибутов и свойств WooCommerce
При создании многоязычного интернет-магазина на WooCommerce часто возникает необходимость автоматического перевода атрибутов (например, цвет, размер) и их значений, чтобы покупатели видели описания на своем языке. Основные симптомы проблемы:
- Атрибуты товаров и их значения отображаются только на одном языке.
- Ручное добавление переводов слишком трудоемко и подвержено ошибкам.
- Плагины-переводчики не всегда корректно обрабатывают термины из WooCommerce.
Для диагностики проверьте, как именно хранятся атрибуты в базе данных. WooCommerce использует wp_terms, wp_term_taxonomy и wp_termmeta для атрибутов и их значений.
Пошаговое решение автоматического перевода атрибутов и свойств
1. Подключение к API перевода (например, Google Translate или WPGPT)
Для автоматизации перевода нужно реализовать вызов API. Ниже пример функции для перевода текста через Google Translate API (v2):
function translate_text_google($text, $target_lang = 'en') {
$api_key = 'YOUR_GOOGLE_TRANSLATE_API_KEY';
$url = 'https://translation.googleapis.com/language/translate/v2?key=' . $api_key;
$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. Получение атрибутов и их значений WooCommerce
Атрибуты товаров хранятся как таксономии с префиксом pa_. Для получения всех атрибутов используйте:
$attribute_taxonomies = wc_get_attribute_taxonomies();Для получения терминов (значений) атрибута:
$terms = get_terms(['taxonomy' => 'pa_color', 'hide_empty' => false]);3. Автоматический перевод и обновление терминов
Пример кода, который переводит название атрибута и его терминов, а затем создает новую таксономию для перевода (например, pa_color_en):
function translate_wc_attributes_and_terms($target_lang = 'en') {
$attribute_taxonomies = wc_get_attribute_taxonomies();
foreach ($attribute_taxonomies as $attr) {
$original_taxonomy = wc_attribute_taxonomy_name($attr->attribute_name); // например, pa_color
// Перевод названия атрибута
$translated_name = translate_text_google($attr->attribute_label, $target_lang);
if (!$translated_name) continue;
// Создаем новую таксономию для перевода атрибута
$translated_taxonomy = $original_taxonomy . '_' . $target_lang; // например, pa_color_en
// Получаем термины оригинального атрибута
$terms = get_terms(['taxonomy' => $original_taxonomy, 'hide_empty' => false]);
foreach ($terms as $term) {
// Переводим название термина
$translated_term_name = translate_text_google($term->name, $target_lang);
if (!$translated_term_name) continue;
// Проверяем, существует ли уже термин в переведенной таксономии
$existing_term = get_term_by('name', $translated_term_name, $translated_taxonomy);
if (!$existing_term) {
// Создаем термин в переводе
wp_insert_term($translated_term_name, $translated_taxonomy);
}
}
}
}Проверка результата после внедрения
- В админке WordPress проверьте наличие новых таксономий с суффиксом языка (
pa_color_en). - Убедитесь, что термины в новых таксономиях содержат переводы.
- На фронтенде подключите нужные таксономии к товарам в зависимости от текущего языка.
- Проверьте, что атрибуты и их значения отображаются корректно на нужном языке.
Частые ошибки и как их исправить
- Ошибка: Нет перевода, функция возвращает
false.
Причина: Неверный API ключ или превышен лимит запросов.
Решение: Проверьте ключ API, ограничения тарифа, логи ошибок WP. - Ошибка: Термины не создаются, возникает ошибка при вызове
wp_insert_term.
Причина: Таксономия не зарегистрирована.
Решение: Зарегистрируйте новую таксономию программно перед созданием терминов. - Ошибка: Переводы не отображаются на сайте.
Причина: Фронтенд шаблон не выводит новые таксономии.
Решение: Добавьте поддержку новых таксономий в шаблоны и фильтры WooCommerce.
Практические советы по безопасности и производительности
- Кэшируйте результаты перевода с помощью Transients API, чтобы не делать повторные вызовы к API.
- Используйте асинхронные задачи (WP-Cron или очереди) для перевода большого количества терминов, чтобы избежать таймаутов.
- Защищайте API ключи — храните их в
wp-config.phpи не публикуйте в открытом доступе. - Регулярно проверяйте и обновляйте используемые версии WooCommerce и WordPress для совместимости.
Сравнение вариантов реализации автоматического перевода атрибутов
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Плагины-переводчики (WPML, Polylang) | Готовое решение, интеграция с WooCommerce | Платные, могут не поддерживать все атрибуты | Если нужен полный мультиязычный сайт без кастомов |
| Собственный код с Google Translate API | Гибкость, контроль, можно интегрировать с вашим API | Требует программирования, возможны ошибки | Для автоматического перевода с индивидуальной логикой |
| Использование WPGPT (через https://wpshop.ru/plugins/wpgpt?utm_source=wplangs.ru&utm_medium=article&utm_campaign=woocommerce-avtomaticheskiy-perevod-svoystv-i-atributov-tovarov) | Автоматизация на базе ИИ, высокая точность | Необходима подписка, зависит от качества модели | Для современных решений с ИИ и автоматизацией |