wplangs.ru wordpress WP Langs

WooCommerce: автоматический перевод полей дополнительной информации товаров

Что такое поля дополнительной информации товаров в 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
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее