Как автоматически передавать язык пользователя в WooCommerce для мультиязычного сайта

Проблема: язык пользователя не сохраняется при работе с WooCommerce

При создании мультиязычного интернет-магазина на WordPress с WooCommerce часто возникает задача корректно передавать и сохранять выбранный пользователем язык на всех страницах и при оформлении заказа. Без правильной передачи языка возникают ситуации, когда после перехода на страницу корзины или оформления заказа язык меняется на язык по умолчанию, что ухудшает UX и ведет к потере конверсий.

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

Чтобы понять, передается ли язык корректно, надо проверить следующие моменты:

  • Как реализовано переключение языков: плагин (Polylang, WPML) или кастомный функционал;
  • Передается ли параметр языка в URL (например, /en/, /de/)
  • Сохраняется ли язык в сессии или куках при переходах;
  • Как WooCommerce обрабатывает язык в сессии и при генерации страниц оформления заказа;

Для проверки можно открыть консоль браузера, посмотреть cookie и параметры URL, а также отследить HTTP-запросы и сессии (через инструменты разработчика или плагины типа Query Monitor).

Пошаговое решение: автоматическая передача языка пользователя в WooCommerce

1. Убедитесь, что язык передается через URL

Большинство мультиязычных плагинов добавляют код языка в URL. Проверьте, что после выбора языка в адресе есть соответствующий префикс, например https://example.com/en/product/.

2. Сохраняйте язык в сессии WooCommerce

Для того чтобы WooCommerce корректно работал с языком пользователя, полезно сохранять выбранный язык в сессии. Добавьте следующий код в файл functions.php вашей темы или в кастомный плагин:

add_action('init', function() {
    if (isset($_GET['lang'])) {
        WC()->session->set('user_lang', sanitize_text_field($_GET['lang']));
    }
});

Этот код сохраняет параметр языка из URL в сессии WooCommerce. Если вы используете Polylang, параметр может называться по-другому, например pll_language. Тогда замените lang на нужное имя.

3. Добавьте фильтр для локализации корзины и страницы оформления заказа

Чтобы WooCommerce отображал контент на нужном языке, можно подменить язык локализации, используя фильтр locale:

add_filter('locale', function($locale) {
    if (is_admin()) {
        return $locale; // не менять язык в админке
    }
    $user_lang = WC()->session->get('user_lang');
    if ($user_lang) {
        // Замените соответствие языков на ваше
        $mapping = [
            'en' => 'en_US',
            'de' => 'de_DE',
            'fr' => 'fr_FR',
            'ru' => 'ru_RU',
        ];
        if (array_key_exists($user_lang, $mapping)) {
            return $mapping[$user_lang];
        }
    }
    return $locale;
});

Этот фильтр подменит язык локализации WooCommerce в зависимости от значения из сессии.

4. Передавайте язык в AJAX-запросах WooCommerce

Если на вашем сайте AJAX-запросы WooCommerce обрабатывают добавление в корзину или обновление, убедитесь, что язык передается в запросах. Для этого можно добавить в JavaScript передачу параметра языка:

jQuery.ajaxSetup({
    data: {
        lang: window.location.pathname.split('/')[1] || 'ru' // пример извлечения языка из URL
    }
});

А на сервере в PHP аналогично считывайте $_REQUEST['lang'] и обновляйте сессию.

Как проверить, что решение работает

  • Перейдите на сайт, выберите язык (например, английский).
  • Проверьте, что в URL появился префикс языка.
  • Добавьте товар в корзину и перейдите к оформлению заказа.
  • Убедитесь, что страницы корзины и оформления заказа отображаются на выбранном языке.
  • Проверьте cookie и сессию WooCommerce через инструменты разработчика — значение языка должно сохраняться.

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

  • Язык не сохраняется при переходе на страницу оформления заказа. Причина: отсутствует сохранение языка в сессии. Решение — добавить код сохранения языка в сессию (см. пункт 2).
  • Фильтр locale не работает. Возможно, WooCommerce или тема переопределяет локаль позже. Проверьте приоритет фильтра, попробуйте увеличить приоритет, например add_filter('locale', 'func', 20).
  • Конфликт с другими плагинами мультиязычности. Убедитесь, что параметры языка совпадают и корректно передаются между плагинами и WooCommerce.
  • Язык не передается в AJAX. Добавьте параметр языка в AJAX-запросы и обновите сессию на сервере.

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

  • Используйте sanitize_text_field() для обработки входящих параметров языка, чтобы избежать XSS-уязвимостей.
  • Не храните язык в cookie без необходимости, лучше использовать сессию WooCommerce, которая более защищена.
  • Если у вас очень большой трафик, следите за тем, чтобы фильтры и хуки не сильно нагружали сервер — кешируйте результаты, если возможно.

Сравнение способов передачи языка в WooCommerce

СпособПлюсыМинусы
Передача языка в URLПростота, видимость, совместимость с SEOТребует настройки плагина, может влиять на структуру ссылок
Сохранение языка в сессии WooCommerceУдобство, язык сохраняется при переходахТребует дополнительного кода, не всегда работает с кешированием
Передача языка через cookieПростота храненияМенее безопасно, возможны проблемы с GDPR и политикой cookie
Как использовать хук wptranslate_autotranslate для автоперевода текстов в WordPress
28.03.2026
Как сделать автоперевод контента WordPress на основе open source решений
23.01.2026
Как настроить передачу языка в WordPress для автоперевода
31.03.2026
Как передавать текст в автопереводчик в WordPress через хуки
26.02.2026
Как использовать WPML для автоперевода страниц WordPress
09.02.2026