Проблема: необходимость автоматического перевода при создании товара в WooCommerce
При работе с многоязычными магазинами на WooCommerce часто возникает задача: при добавлении нового товара нужно автоматически переводить описание и атрибуты на другие языки без ручного копирования и вставки переводов. Это ускоряет загрузку каталога и снижает риск ошибок.
Диагностика проблемы
Если при создании товара вы добавляете описание и атрибуты только на одном языке, а остальные языки остаются пустыми, то:
- Посетители на других языках видят пустое описание и характеристики.
- SEO-оптимизация для переводных страниц ухудшается.
- Ручной перевод занимает много времени и ресурсов.
Проверьте, как настроена мультиязычность: используете ли вы плагин типа WPML, Polylang, или собственные решения. Без поддержки перевода атрибутов автоматизация невозможна.
Пошаговое решение автоматического перевода описания и атрибутов товаров
1. Подготовка: API для перевода
Для автоматического перевода понадобится подключение к внешнему сервису, например Google Translate API, DeepL или WPGPT от WPShop, если хотите интегрировать ИИ-перевод.
2. Хуки WooCommerce для перехвата сохранения товара
Используем хук save_post_product или woocommerce_process_product_meta для запуска функции перевода при сохранении товара.
add_action('woocommerce_process_product_meta', 'auto_translate_product_data', 20, 1);3. Функция перевода описания и атрибутов
Пример кода с вызовом API перевода (упрощённый):
function auto_translate_product_data($post_id) {
// Получаем основной язык и целевой
$source_lang = 'ru';
$target_lang = 'en';
// Получаем описание на основном языке
$product = wc_get_product($post_id);
$description = $product->get_description();
// Проверяем, переведено ли уже описание
$translated_description = get_post_meta($post_id, '_translated_description_' . $target_lang, true);
if (!$translated_description) {
// Переводим описание через API
$translated = my_translate_api_call($description, $source_lang, $target_lang);
if ($translated) {
// Сохраняем перевод в мета
update_post_meta($post_id, '_translated_description_' . $target_lang, $translated);
// Можно записать перевод в отдельный язык, если мультиязычность поддерживает
}
}
// Аналогично переводим атрибуты
$attributes = $product->get_attributes();
foreach ($attributes as $attr_key => $attr) {
if ($attr->is_taxonomy()) {
// Для термов атрибута можно перевести названия терминов
$terms = wp_get_post_terms($post_id, $attr->get_name());
foreach ($terms as $term) {
$translated_name = get_term_meta($term->term_id, '_translated_name_' . $target_lang, true);
if (!$translated_name) {
$translated_term = my_translate_api_call($term->name, $source_lang, $target_lang);
if ($translated_term) {
update_term_meta($term->term_id, '_translated_name_' . $target_lang, $translated_term);
}
}
}
} else {
// Для пользовательских атрибутов переводим значения
$value = $attr->get_options();
$translated_values = [];
foreach ($value as $val) {
$translated_val = my_translate_api_call($val, $source_lang, $target_lang);
$translated_values[] = $translated_val ?: $val;
}
// Сохраняем переведённые значения в мета или обновляем атрибут
update_post_meta($post_id, '_translated_attr_' . $attr_key . '_' . $target_lang, $translated_values);
}
}
}
// Заглушка функции вызова API перевода
function my_translate_api_call($text, $source, $target) {
// Реализуйте вызов вашего API здесь
return 'Перевод: ' . $text; // временный заглушка
}4. Интеграция с мультиязычным плагином
Если используете WPML или Polylang, нужно сохранять переводы в соответствующие языковые посты или термины, а не только в метаданные. Это требует дополнительного кода для создания или обновления переводов.
Как проверить, что автоматический перевод работает
- Создайте новый товар с описанием и атрибутами на основном языке.
- Сохраните товар и проверьте метаданные (через phpMyAdmin или плагин типа Adminer) на наличие переведённых текстов.
- Перейдите на сайт с языком перевода и убедитесь, что описание и атрибуты отображаются с переводом.
- Проверьте логи API вызовов для ошибок.
Частые ошибки и как их исправить
- Перевод не запускается при сохранении товара: проверьте правильность использования хуков и приоритетов.
- Переводы не сохраняются: убедитесь, что функции
update_post_metaилиupdate_term_metaвызываются с правильными ключами и что база данных доступна для записи. - Проблемы с мультиязычностью: при использовании WPML или Polylang нужно создавать переводы через их API, иначе переводы не будут видны на фронте.
- API перевода отвечает ошибкой: проверьте корректность API ключа, лимиты запросов и формат входных данных.
Практические советы по безопасности и производительности
- Не вызывайте API перевода при каждом сохранении без условий — кешируйте результаты в метаданных или терминах.
- Используйте асинхронные задачи (например, WP-Cron или очереди) для перевода, чтобы не блокировать сохранение товара.
- Защищайте API ключи, не храните их в открытом виде — используйте константы в
wp-config.php. - Ограничивайте количество символов для перевода за один запрос, чтобы не превысить лимиты API.
Сравнение подходов к автоматическому переводу описания и атрибутов в WooCommerce
| Подход | Преимущества | Недостатки |
|---|---|---|
| Встроенный перевод через WPML/Polylang | Интеграция с языковой системой, поддержка SEO | Требует ручного перевода или платных дополнений |
| Собственный код с вызовом внешнего API | Автоматизация, гибкость, кастомизация | Требует разработки, возможны ошибки, нагрузка на сервер |
| Плагины автоперевода (например, WPGPT) | Простая установка, готовые решения | Ограничения по количеству переводов, платные API |