Диагностика проблемы: почему описания товаров не переводятся автоматически
В интернет-магазинах на WooCommerce часто возникает задача обеспечить многоязычность описаний товаров. При этом стандартные решения, такие как WPML или Polylang, требуют ручного перевода или подключения дополнительных платных модулей. Без правильной настройки автоперевода описания товаров не переводятся, что приводит к ухудшению пользовательского опыта и потере клиентов.
Основные причины проблемы:
- Отсутствие интеграции автопереводчика с метаполями или полями WooCommerce.
- Неправильное использование хуков, из-за чего перевод не применяется к описаниям.
- Кэширование, мешающее обновлению перевода на фронтенде.
Пошаговое решение: как реализовать автоперевод описаний товаров
1. Выбор автопереводчика и подготовка API
Для автоматического перевода можно использовать бесплатные или платные API, например, Google Translate API, DeepL API или Microsoft Translator. В данном примере рассмотрим интеграцию с Google Translate API (v2).
define('GOOGLE_TRANSLATE_API_KEY', 'ваш_ключ_от_api');2. Создание функции автоперевода описания товара
Добавьте в functions.php темы или в собственный плагин следующий код для перевода:
function wpt_translate_text($text, $target_language = 'en') {
if (empty($text)) {
return $text;
}
$apiKey = GOOGLE_TRANSLATE_API_KEY;
$url = 'https://translation.googleapis.com/language/translate/v2?key=' . $apiKey;
$data = [
'q' => $text,
'target' => $target_language,
'format' => 'text'
];
$args = [
'body' => json_encode($data),
'headers' => [
'Content-Type' => 'application/json'
]
];
$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_process_product_meta для запуска перевода при обновлении товара в админке. Пример для перевода описания на английский:
add_action('woocommerce_process_product_meta', 'wpt_autotranslate_product_description', 20, 1);
function wpt_autotranslate_product_description($post_id) {
$product = wc_get_product($post_id);
if (!$product) {
return;
}
$original_description = $product->get_description();
$translated_description = wpt_translate_text($original_description, 'en');
// Сохраняем переведенное описание в пользовательское поле
update_post_meta($post_id, '_translated_description_en', $translated_description);
}4. Вывод переведенного описания на фронтенде
Для отображения перевода добавьте фильтр на вывод описания товара, который будет подставлять переведенный текст:
add_filter('the_content', 'wpt_show_translated_description', 20);
function wpt_show_translated_description($content) {
if (is_product()) {
global $post;
$translated = get_post_meta($post->ID, '_translated_description_en', true);
if (!empty($translated)) {
return $translated;
}
}
return $content;
}Проверка результата после внедрения
1. Зайдите в админку WooCommerce и откройте редактирование товара.
2. Измените описание товара и сохраните.
3. Проверьте, что в метаполе _translated_description_en появилось переведенное описание (через phpMyAdmin или плагин Advanced Custom Fields).
4. На странице товара на фронтенде должно показываться переведённое описание вместо оригинала (при условии, что язык сайта установлен на английский).
Частые ошибки и как исправить
- Ошибка 1: Появляется оригинальное описание, а перевод не отображается.
Проверьте, что хукthe_contentприменяется на странице товара. В некоторых темах описание выводится через функции темы — нужно адаптировать фильтр под конкретный вызов. - Ошибка 2: API Google возвращает ошибку или перевод не выполняется.
Проверьте правильность API-ключа и настройки биллинга в Google Cloud Console. - Ошибка 3: Перевод сохраняется, но не обновляется при изменении описания.
Проверьте, что функция автоперевода вызывается при каждом сохранении товара и что поле метаданных перезаписывается.
Практические советы по безопасности и производительности
- Не вызывайте автоперевод на каждом запросе — это сильно замедлит сайт и увеличит расходы API. Используйте сохранение перевода в метаполях.
- Ограничьте частоту вызова API, например, только при обновлении описания.
- Используйте transient или объектный кэш для хранения переведённых данных, если переводите динамический контент.
- Храните API-ключ в
wp-config.phpили в настройках плагина с ограниченным доступом. - Для больших магазинов рассмотрите пакетные переводы через WP CLI для массовой обработки товаров.
Сравнение методов реализации автоперевода описаний товаров WooCommerce
| Метод | Плюсы | Минусы | Пример использования |
|---|---|---|---|
| Плагин автоперевода (WPML, TranslatePress) | Готовое решение, интеграция с WooCommerce | Платные модули, ограниченная кастомизация | Установка и настройка через админку |
| Собственный код с API (пример выше) | Полный контроль, гибкость | Требует навыков программирования, настройка API | Хуки, wp_remote_post, метаполя |
| Автоперевод через AJAX на фронтенде | Динамический перевод без нагрузки на сервер | Задержка отображения, SEO проблемы | AJAX-запросы к API при загрузке страницы |