Диагностика проблемы: почему описания товаров WooCommerce не переводятся автоматически
Если вы используете Polylang для мультиязычности и столкнулись с тем, что описания товаров, атрибуты или другие данные WooCommerce не переводятся автоматически, вероятно, причина в том, что стандартных настроек Polylang для WooCommerce недостаточно. Поля, относящиеся к товарам, часто хранятся в метаданных, и Polylang не переводит их по умолчанию.
Как проверить, что перевод не работает
- Перейдите в админку WordPress → Товары → Редактирование товара.
- Переключитесь на второй язык в редакторе Polylang.
- Убедитесь, что описание товара (краткое и полное) пустое или не переведено.
- Проверьте атрибуты товара в переводе — если они на исходном языке, значит автоперевод не сработал.
Пошаговое решение: автоматический перевод описаний товаров с помощью хуков и Google Translate API
1. Подключение Google Translate API
Создайте аккаунт в Google Cloud, активируйте API Cloud Translation и получите API ключ.
2. Добавление функции автоперевода при создании перевода товара
Добавим код в functions.php вашей темы или в кастомный плагин для перевода описания товара при сохранении перевода Polylang.
function wpt_autotranslate_woocommerce_product_description($post_id, $lang) {
// Проверяем, что это перевод товара
if ('product' !== get_post_type($post_id)) {
return;
}
// Получаем ID оригинального товара
$original_id = pll_get_post($post_id, pll_default_language());
if (!$original_id) {
return;
}
// Получаем оригинальное описание и краткое описание
$original_content = get_post_field('post_content', $original_id);
$original_excerpt = get_post_field('post_excerpt', $original_id);
// Переводим контент
$translated_content = wpt_google_translate_text($original_content, pll_get_post_language($post_id));
$translated_excerpt = wpt_google_translate_text($original_excerpt, pll_get_post_language($post_id));
// Обновляем перевод
wp_update_post([
'ID' => $post_id,
'post_content' => $translated_content,
'post_excerpt' => $translated_excerpt
]);
}
add_action('pll_save_post', 'wpt_autotranslate_woocommerce_product_description', 10, 2);
// Функция отправки текста в Google Translate API
function wpt_google_translate_text($text, $target_lang) {
if (empty($text)) return '';
$apiKey = 'ВАШ_API_КЛЮЧ';
$url = 'https://translation.googleapis.com/language/translate/v2?key=' . $apiKey;
$data = [
'q' => $text,
'target' => $target_lang
];
$args = [
'body' => json_encode($data),
'headers' => [
'Content-Type' => 'application/json'
],
'method' => 'POST'
];
$response = wp_remote_post($url, $args);
if (is_wp_error($response)) {
return $text; // Возвращаем оригинал при ошибке
}
$body = json_decode(wp_remote_retrieve_body($response), true);
if (isset($body['data']['translations'][0]['translatedText'])) {
return $body['data']['translations'][0]['translatedText'];
}
return $text;
}3. Автоматический перевод атрибутов товаров
Атрибуты товаров WooCommerce — таксономии. Для их перевода используем следующий код:
function wpt_translate_woocommerce_attributes_taxonomy($term_id, $lang) {
$original_term_id = pll_get_term($term_id, pll_default_language());
if (!$original_term_id) {
return;
}
$term = get_term($original_term_id);
if (!$term) return;
$translated_name = wpt_google_translate_text($term->name, $lang);
$translated_slug = sanitize_title($translated_name);
wp_update_term($term_id, $term->taxonomy, [
'name' => $translated_name,
'slug' => $translated_slug
]);
}
add_action('pll_save_term', 'wpt_translate_woocommerce_attributes_taxonomy', 10, 2);Проверка результата после внедрения
- Создайте новый товар на основном языке.
- Добавьте описание и атрибуты.
- Создайте перевод товара через Polylang.
- После сохранения перевода проверьте, что описание и атрибуты перевелись автоматически.
- Если переводы появились, значит интеграция работает.
Частые ошибки и как их исправить
- API ключ Google Translate не работает или превышен лимит: проверьте настройки Google Cloud и квоты.
- Перевод не срабатывает при сохранении перевода: убедитесь, что функция привязана к правильному хуку
pll_save_postи получает правильные параметры. - Некорректное отображение перевода: иногда для правильного отображения нужно очистить кэш сайта и браузера.
- Атрибуты товаров не переводятся: проверьте, что таксономии зарегистрированы для перевода в Polylang и функция подключена к хуку
pll_save_term.
Практические советы по безопасности и производительности
- Не храните API ключ Google Translate в открытом виде, используйте .env или wp-config.php для его хранения.
- Ограничьте вызовы API, чтобы не превышать квоты и не создавать задержек при сохранении.
- Кешируйте результаты перевода, если один и тот же текст переводится часто.
- Используйте WP Cron для пакетного перевода большого количества товаров, чтобы не перегружать сервер.
Сравнение вариантов реализации автоперевода WooCommerce с Polylang
| Метод | Плюсы | Минусы | Компромисс |
|---|---|---|---|
| Плагины автоперевода (WPML, TranslatePress) | Простота настройки, поддержка WooCommerce | Платные, могут замедлять сайт | Использовать для крупных проектов |
| Кастомный автоперевод через Google Translate API + хуки | Гибкость, контроль, бесплатный API с лимитами | Нужно писать код, возможны ошибки | Подходит для опытных разработчиков |
| Ручной перевод через Polylang | Точный перевод, без ошибок API | Трудозатратно, не масштабируемо | Использовать для небольших каталогов |