WooCommerce: решение проблемы с отображением цен после изменения валюты

Диагностика проблемы с отображением цен после смены валюты в WooCommerce

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

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

  • Отключите все кеширующие плагины и кеш браузера.
  • Проверьте, используют ли ваши шаблоны или кастомный код метод get_price_html() или вывод цены напрямую без обновления объекта товара.
  • Посмотрите, не переопределяет ли плагин валюты методы WooCommerce, и есть ли у него обновления.
  • Активируйте WP_DEBUG, чтобы увидеть возможные ошибки в логах.
  • Проверьте, правильно ли устанавливается валюта в сессии и передается в объекты товаров.

Пошаговое решение: корректное обновление цен при смене валюты

1. Используйте стандартные хуки WooCommerce для обновления цены

Лучший способ — использовать фильтр woocommerce_get_price_html, чтобы динамически изменять отображение цены в зависимости от выбранной валюты. Пример кода:

add_filter('woocommerce_get_price_html', 'custom_price_html_currency_switcher', 10, 2);
function custom_price_html_currency_switcher($price_html, $product) {
    $current_currency = isset($_SESSION['currency']) ? $_SESSION['currency'] : 'USD';
    if ($current_currency === 'EUR') {
        $price = $product->get_price();
        $converted = $price * 0.85; // пример конвертации USD в EUR
        $price_html = wc_price($converted, array('currency' => 'EUR'));
    }
    return $price_html;
}

Обратите внимание, что курс конвертации лучше брать из актуального источника, а не хардкодить.

2. Очистка кеша и сброс объектного кеша WooCommerce

После изменения валюты и цен важно сбросить кеш WooCommerce, например:

wc_delete_product_transients($product_id);

Или полностью очистить кеш:

wp_cache_flush();

3. Правильное хранение валюты в сессии или cookie

Если используете собственный переключатель валюты, сохраняйте выбранную валюту в сессии или cookie, чтобы при перезагрузке страницы цена корректно отображалась.

if (isset($_GET['currency'])) {
    $_SESSION['currency'] = sanitize_text_field($_GET['currency']);
}

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

Чтобы убедиться, что цены отображаются корректно:

  • Очистите кеш браузера и сайта.
  • Переключите валюту с помощью вашего переключателя.
  • Проверьте цены на страницах товара, в корзине и оформлении заказа.
  • Убедитесь, что цены обновляются динамически и соответствуют курсу валют.

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

  • Цены не обновляются после смены валюты — проверьте, что в коде используется фильтр woocommerce_get_price_html, а не прямой вывод цены из объекта без фильтров.
  • Кеширование выводит старые цены — отключите кеширование страниц и объектный кеш на время теста, убедитесь, что вызовы wc_delete_product_transients() применяются.
  • Курс валют захардкожен и устарел — интегрируйте API курсов валют или обновляйте курс вручную.
  • Валюта не сохраняется между страницами — используйте сессию PHP или cookie для сохранения выбора пользователя.

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

  • Используйте проверку и санитизацию данных при работе с валютой из GET/POST запросов.
  • Кешируйте курсы валют на короткий срок, чтобы не нагружать API.
  • Минимизируйте количество вызовов конвертации цены на странице, делайте это централизованно.
  • Используйте проверенные плагины мультивалютности, если нужна сложная логика, например, WooCommerce Multilingual или Currency Switcher.

Сравнение вариантов реализации конвертации валют в WooCommerce

ВариантПлюсыМинусы
Собственный фильтр woocommerce_get_price_htmlГибкость, контроль, отсутствие сторонних зависимостейТребует поддержки, риск ошибок при конвертации
Плагин мультивалютностиГотовое решение с поддержкой, автоматические обновления курсовМожет замедлять сайт, часто платные, возможны конфликты
Жесткая замена цены в шаблонахПросто для небольших сайтов, быстроПлохо масштабируется, ломает совместимость с WooCommerce
Как использовать мета-записи в WordPress для сохранения дополнительных данных
21.09.2026
Как отключить автоматическое обновление WooCommerce без риска для сайта
30.09.2026
WooCommerce: как быстро использовать хуки для добавления контента на страницы товара
27.08.2026
Как создать адаптивный шаблон WordPress с помощью SASS
21.09.2026
Как удалить неиспользуемые метаданные в WordPress
10.09.2026