Автоматический перевод метаданных WooCommerce без потери качества

Диагностика проблемы с переводом метаданных WooCommerce

При создании мультиязычного интернет-магазина на WordPress с WooCommerce часто возникает задача перевода не только основного контента товаров, но и метаданных: артикулы, технические характеристики, пользовательские поля и атрибуты. Стандартные плагины перевода, например Polylang или WPML, автоматически переводят заголовки и описания, но метаданные остаются на исходном языке.

Это приводит к несогласованности информации и ухудшению пользовательского опыта. Часто владельцы магазинов пытаются просто клонировать метаданные или копировать их вручную, что неэффективно и ошибочно.

Как проверить, что метаданные не переводятся

  • Откройте товар на языке перевода.
  • Проверьте произвольные поля (custom fields) и атрибуты в админке WooCommerce.
  • Если данные совпадают с исходным языком — перевод не применяется.
  • Посмотрите на витрину сайта — описание атрибутов и дополнительных характеристик не локализованы.

Пошаговое решение: автоматический перевод метаданных WooCommerce через API DeepL

В этом примере мы реализуем автоматический перевод метаданных (пользовательских полей и атрибутов товаров) с помощью API DeepL при сохранении товара. Для работы нужен API-ключ DeepL.

1. Подключение хука сохранения товара

add_action('save_post_product', 'auto_translate_woocommerce_metadata', 20, 3);

2. Функция перевода метаданных

function auto_translate_woocommerce_metadata($post_id, $post, $update) {
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
    if ($post->post_type !== 'product') return;

    $target_language = 'DE'; // Целевой язык, например немецкий
    $api_key = 'ВАШ_DEEPL_API_КЛЮЧ';

    // Получаем метаданные, которые нужно перевести
    $meta_to_translate = [
        '_custom_field_1',
        '_custom_field_2',
        // добавьте нужные поля
    ];

    foreach ($meta_to_translate as $meta_key) {
        $original_text = get_post_meta($post_id, $meta_key, true);
        if ($original_text) {
            $translated_text = deepl_translate($original_text, $target_language, $api_key);
            if ($translated_text) {
                update_post_meta($post_id, $meta_key . '_de', $translated_text); // сохраняем как отдельное поле
            }
        }
    }

    // Автоматический перевод атрибутов
    $product = wc_get_product($post_id);
    if (!$product) return;

    $attributes = $product->get_attributes();

    foreach ($attributes as $attribute_name => $attribute_obj) {
        if ($attribute_obj->is_taxonomy()) {
            // Для таксономий нужно перевести термины
            $terms = wp_get_post_terms($post_id, $attribute_obj->get_name());
            foreach ($terms as $term) {
                $translated_name = deepl_translate($term->name, $target_language, $api_key);
                if ($translated_name) {
                    // Создаем перевод термина (создаем новую таксономию или перевод)
                    // Сложно сделать автоматически, обычно управляется переводчиком таксономий
                }
            }
        } else {
            // Прямое значение атрибута
            $options = $attribute_obj->get_options();
            $translated_options = [];
            foreach ($options as $option) {
                $translated_option = deepl_translate($option, $target_language, $api_key);
                $translated_options[] = $translated_option ?: $option;
            }
            // Сохраняем переведенные опции в метаданных или отдельном поле
            update_post_meta($post_id, 'translated_attribute_' . $attribute_name . '_' . strtolower($target_language), $translated_options);
        }
    }
}

function deepl_translate($text, $target_lang, $api_key) {
    $url = 'https://api-free.deepl.com/v2/translate';

    $data = [
        'auth_key' => $api_key,
        'text' => $text,
        'target_lang' => strtoupper($target_lang),
    ];

    $response = wp_remote_post($url, [
        'body' => $data,
        'timeout' => 10,
    ]);

    if (is_wp_error($response)) {
        return false;
    }

    $body = json_decode(wp_remote_retrieve_body($response), true);
    if (!empty($body['translations'][0]['text'])) {
        return $body['translations'][0]['text'];
    }

    return false;
}

Проверка результата после внедрения

  • Перейдите в админку WooCommerce и откройте товар.
  • Проверьте, что для каждого переведённого метаданных есть отдельное поле с суффиксом языка, например _custom_field_1_de.
  • На фронтенде создайте вывод переведенных метаданных для выбранного языка.
  • Убедитесь, что перевод корректный и не дублирует исходный текст.

Частые ошибки и как исправить

  • API ключ DeepL не работает: проверьте правильность ключа, тарификацию и регион.
  • Перевод не сохраняется: убедитесь, что используете правильные хуки (например, save_post_product), а не автосохранение.
  • Перевод атрибутов таксономий не отображается: для терминов таксономий нужен отдельный перевод через WPML или Polylang, автоматический перевод требует создания новых терминов вручную.
  • Производительность падает: перевод при сохранении товара занимает время, используйте асинхронные задачи (wp_cron или queue).

Практические советы по безопасности и производительности

  • Не храните API-ключи в открытом коде — используйте define('DEEPL_API_KEY', ''); в wp-config.php или безопасные переменные окружения.
  • Кешируйте переводы, чтобы не отправлять повторные запросы на API.
  • Для большого каталога товаров используйте отложенный перевод через очереди задач (например, с помощью WP Background Processing).
  • Ограничьте перевод только тех метаданных, которые действительно нужны для вывода на сайте.

Сравнение подходов для перевода метаданных WooCommerce

СпособПлюсыМинусыКогда использовать
Ручной перевод через админкуПолный контроль, точностьТрудозатратно, долгоМаленький каталог, точные переводы
Автоматический перевод через API (DeepL, Google)Быстро, масштабируемоПотенциальные ошибки перевода, нагрузка на серверБольшой каталог, быстрое обновление
Использование плагинов WPML/Polylang для таксономийИнтеграция с переводами темы и плагиновНе всегда поддерживают пользовательские поляКомплексный мультиязычный сайт
Автоматический перевод атрибутов товаров WooCommerce в WordPress
10.05.2026
Как добавить поддержку мультиязычности в тему WordPress без плагинов
27.12.2025
Как оптимизировать перевод тем и плагинов WordPress для быстродействия
09.01.2026
Как установить и настроить локализацию в своем плагине WordPress
19.03.2026
Правильная настройка автоперевода описаний товаров WooCommerce в WordPress
20.04.2026