Что такое поля дополнительной информации товаров в WooCommerce и зачем их переводить
В WooCommerce под дополнительной информацией товаров понимаются нестандартные поля, которые добавлены через метаполя (custom fields) или плагины расширения. Это могут быть уникальные характеристики, инструкции, технические данные и т.п. Если ваш магазин многоязычный, то перевод этих полей обязателен для полноценного пользовательского опыта и SEO.
Диагностика: как определить, что дополнительные поля не переведены
Часто бывает, что стандартный автоперевод WooCommerce или плагинов многоязычности не охватывает эти поля. Для диагностики:
- Откройте карточку товара в каждом языке и проверьте отображение данных в дополнительных полях.
- Проверьте базу данных: в таблице
wp_postmetaнайдите ключи метаданных, относящиеся к дополнительным полям (например,_custom_field_name). - Проверьте настройки плагинов мультиязычности (WPML, Polylang, WPLangs), поддерживают ли они эти поля.
Пошаговое решение: автоматический перевод полей дополнительной информации
1. Получение данных полей
function get_custom_fields_data($product_id) {
return get_post_meta($product_id);
}Эта функция вернет массив всех метаданных товара.
2. Подключение к API автоперевода
Используйте API перевода, например, Google Translate API или свой собственный сервис (WPGPT, если есть). Ниже пример на Google Translate:
function translate_text($text, $target_lang) {
$apiKey = 'ВАШ_API_КЛЮЧ';
$url = 'https://translation.googleapis.com/language/translate/v2?key=' . $apiKey;
$fields = [
'q' => $text,
'target' => $target_lang
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
if (isset($result['data']['translations'][0]['translatedText'])) {
return $result['data']['translations'][0]['translatedText'];
}
return false;
}3. Автоматический перевод и сохранение метаданных
function auto_translate_custom_fields($product_id, $target_lang) {
$custom_fields = get_post_meta($product_id);
foreach ($custom_fields as $key => $values) {
// Фильтруем системные метаполя
if (strpos($key, '_') === 0) continue;
$original_text = maybe_unserialize($values[0]);
if (is_string($original_text) && !empty($original_text)) {
$translated = translate_text($original_text, $target_lang);
if ($translated) {
// Сохраняем переведенное значение с префиксом языка
update_post_meta($product_id, $key . '_' . $target_lang, $translated);
}
}
}
}4. Вывод переведенных полей на фронтенде
function display_translated_custom_field($product_id, $field_key, $lang) {
$translated = get_post_meta($product_id, $field_key . '_' . $lang, true);
if ($translated) {
echo esc_html($translated);
} else {
// fallback на оригинал
echo esc_html(get_post_meta($product_id, $field_key, true));
}
}Проверка результата после внедрения
- Откройте страницу товара на целевом языке и убедитесь, что дополнительные поля показывают переведенный текст.
- Проверьте в базе данных наличие метаданных с ключами, оканчивающимися на язык (например,
custom_description_frдля французского). - Для диагностики ошибок используйте логирование ответов API перевода и ошибок обновления метаданных.
Частые ошибки и как их исправить
- Поля не переводятся: возможно, метаполя начинаются с подчеркивания (приватные), их игнорируют функции. Убедитесь, что ваша фильтрация ключей корректна.
- API ключ переводчика не работает: проверьте корректность и наличие лимитов на вашем аккаунте Google Translate или другого сервиса.
- Перевод сохраняется в оригинальном языке: проверьте, что параметр
$target_langпередается и используется корректно. - Проблемы с сериализованными данными: если метаполя содержат массивы, используйте
maybe_unserializeи сериализацию обратно после перевода.
Советы по безопасности и производительности
- Используйте transient-кэширование для хранения результатов перевода, чтобы не делать повторные запросы к API для одного и того же текста.
- Ограничьте частоту запросов к API перевода, чтобы не превысить лимиты.
- Проверяйте и фильтруйте входные данные, чтобы избежать инъекций в метаданные.
- Для массового перевода используйте WP CLI скрипты, чтобы не нагружать фронтенд сайта.
Сравнение вариантов реализации автоперевода полей WooCommerce
| Метод | Плюсы | Минусы | Пример |
|---|---|---|---|
| Плагин перевода (WPML, Polylang) | Интеграция с админкой, удобство | Не всегда поддерживает кастомные поля | Проверить настройки полей для перевода |
| Ручной код с API перевода | Гибкость, полный контроль | Нужно писать код, платить за API | Приведенный выше |
| WPGPT (автоматизация через ИИ) | Автоматический контекстный перевод | Зависимость от сервиса, стоимость | Использовать через плагин WPGPT |