wplangs.ru wordpress WP Langs

WooCommerce: использование хуков для автоперевода атрибутов и вариантов товаров

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

При создании многоязычного интернет-магазина на WooCommerce часто сталкиваются с проблемой: атрибуты товаров и их варианты остаются на исходном языке и не переводятся автоматически. Это негативно влияет на пользовательский опыт и SEO, особенно если магазин ориентирован на международную аудиторию.

Основные признаки проблемы:

  • Атрибуты товаров отображаются только на одном языке в карточках товара.
  • Варианты (например, размеры, цвета) не переводятся или отображаются некорректно.
  • При использовании автоматического перевода контента атрибуты остаются без перевода.

Пошаговое решение: как перевести атрибуты и варианты товаров с помощью хуков WooCommerce

1. Используем фильтр woocommerce_product_variation_get_attribute для перевода вариантов атрибутов

Этот фильтр позволяет изменить значение атрибута варианта прямо при его выводе. Подключаем автоматический перевод через API (например, Google Translate) или локальный словарь.

add_filter('woocommerce_product_variation_get_attribute', 'auto_translate_variation_attribute', 10, 3);
function auto_translate_variation_attribute($value, $attribute_name, $variation) {
    // Пример использования локального словаря переводов
    $translations = [
        'size' => [
            'Small' => 'Маленький',
            'Medium' => 'Средний',
            'Large' => 'Большой'
        ],
        'color' => [
            'Red' => 'Красный',
            'Blue' => 'Синий'
        ]
    ];

    $attribute_key = str_replace('attribute_pa_', '', $attribute_name);
    if (isset($translations[$attribute_key][$value])) {
        return $translations[$attribute_key][$value];
    }

    return $value;
}

2. Перевод названий атрибутов в карточках и списках товаров

Для перевода названий атрибутов используем фильтр woocommerce_attribute_label. Он позволяет изменить выводимый лейбл атрибута.

add_filter('woocommerce_attribute_label', 'auto_translate_attribute_label', 10, 2);
function auto_translate_attribute_label($label, $name) {
    $labels_translation = [
        'pa_size' => 'Размер',
        'pa_color' => 'Цвет'
    ];

    if (isset($labels_translation[$name])) {
        return $labels_translation[$name];
    }

    return $label;
}

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

1. Откройте карточку товара с вариациями и атрибутами на фронтенде.

2. Убедитесь, что названия атрибутов и их варианты отображаются на нужном языке (например, "Размер" вместо "Size" и "Маленький" вместо "Small").

3. Проверьте несколько товаров с разными атрибутами.

4. Используйте инструменты разработчика браузера, чтобы проверить, что фильтры действительно применяются (например, смотрите исходный HTML или отладочную информацию).

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

  • Фильтры не работают: Проверьте, что код добавлен в functions.php вашей темы или в плагин, и что он выполняется до вывода страницы.
  • Неправильные имена атрибутов: WooCommerce использует префикс pa_ для глобальных атрибутов, убедитесь, что ключи словаря соответствуют именно этим именам (например, pa_size, pa_color).
  • Перевод не применяется к вариациям: Фильтр woocommerce_product_variation_get_attribute работает только для вариаций. Для других случаев нужно использовать другие хуки.
  • Проблемы с кешированием: Очистите кеш сайта и браузера после внесения изменений.

Практические советы по оптимизации и безопасности

  • Если используете API перевода (Google Translate, DeepL), кэшируйте результаты перевода в transient или метаданных, чтобы снизить количество запросов и ускорить загрузку.
  • Избегайте выполнения HTTP-запросов в фильтрах, которые вызываются часто — это замедляет сайт.
  • Храните словари переводов в виде массива в отдельном PHP-файле для удобного редактирования и масштабирования.
  • Используйте строгие проверки входных данных и избегайте инъекций при работе с динамическими API.

Сравнение подходов к переводу атрибутов WooCommerce

МетодОписаниеПлюсыМинусы
Перевод через хуки (напр., woocommerce_product_variation_get_attribute)Автоматическая подмена текста при выводеЛегко интегрировать, не требует изменения базы данныхПеревод на лету, возможна нагрузка на сайт при внешних API
Ручной перевод атрибутов в админке WooCommerceСоздание переведенных атрибутов и вариантов вручнуюНадежно, SEO-дружественно, нет дополнительной нагрузкиТрудозатратно, сложно масштабировать
Использование плагинов для многоязычности (WPML, Polylang)Полноценная поддержка переводов с UIУдобно, много функцийСтоимость, сложность настройки, нагрузка на сайт
×
Делай сайт лучше!!

-20% на премиум темы и плагины

Использовать скидку ⋙