WooCommerce: решение проблемы с корректным отображением цен после скидок

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

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

Для диагностики проблемы выполните следующие шаги:

  • Очистите кэш сайта и браузера.
  • Отключите все плагины, кроме WooCommerce, чтобы проверить влияние сторонних плагинов.
  • Переключитесь на стандартную тему Storefront или Reboot (https://wpshop.ru/themes/reboot?utm_source=wpdata.ru&utm_medium=article&utm_campaign=woocommerce-reshenie-problemy-s-korrektnym-otobrazheniem-cen-posle-skidok) для исключения проблем с темой.
  • Проверьте настройки купонов и скидок в WooCommerce: процентные скидки, фиксированные скидки, условия применения.

Пошаговое решение: правильное отображение цен и скидок

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

Для корректного отображения цен с учётом скидок используйте функцию wc_get_price_to_display(), которая автоматически учитывает все скидки и налоги.

global $product;
$price = wc_get_price_to_display( $product );
echo wc_price( $price );

Данный код выводит цену товара с учётом применённых скидок и налогов. Это предпочтительнее, чем прямое обращение к $product->get_price() или $product->get_regular_price().

2. Исправление отображения зачёркнутой старой цены

Чтобы показывать старую цену (регулярную) зачёркнутой рядом с новой ценой, используйте следующий код в шаблоне:

if ( $product->is_on_sale() ) {
    echo '<del>' . wc_price( $product->get_regular_price() ) . '</del> ';
    echo '<ins>' . wc_price( wc_get_price_to_display( $product ) ) . '</ins>';
} else {
    echo wc_price( wc_get_price_to_display( $product ) );
}

3. Обновление цен в AJAX и корзине

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

add_filter( 'woocommerce_get_price_html', 'custom_price_html_with_discount', 10, 2 );
function custom_price_html_with_discount( $price_html, $product ) {
    if ( $product->is_on_sale() ) {
        $regular_price = wc_price( $product->get_regular_price() );
        $sale_price = wc_price( wc_get_price_to_display( $product ) );
        $price_html = '<del>' . $regular_price . '</del> <ins>' . $sale_price . '</ins>';
    }
    return $price_html;
}

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

После внесения изменений:

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

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

  • Использование $product->get_price() вместо wc_get_price_to_display()
    Решение: заменить на wc_get_price_to_display() для правильного учёта скидок и налогов.
  • Конфликты с темами и плагинами, переопределяющими цены
    Решение: протестировать на чистой теме и отключить подозрительные плагины.
  • Отсутствие обновления цен при AJAX-обновлении корзины
    Решение: использовать стандартные AJAX-обработчики WooCommerce или добавить обновление блоков вручную через JS, вызывая серверные функции для получения актуальных цен.

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

  • Избегайте прямого вывода цен из базы без использования WooCommerce API, чтобы не пропустить логику скидок и налогов.
  • Кешируйте HTML блоки цен только с учётом состояния скидок, чтобы не показывать устаревшие данные.
  • Используйте встроенные хуки WooCommerce для модификации вывода, вместо изменения файлов шаблонов напрямую.

Сравнение вариантов реализации отображения цен после скидок

МетодПреимуществаНедостатки
Использование wc_get_price_to_display() и стандартных хуковПравильный учёт скидок и налогов, совместимость с WooCommerceТребует базовых знаний WooCommerce API
Ручное вычисление цен и вывод через $product->get_price()Простота реализацииНе учитываются скидки и налоги, возможны ошибки отображения
Использование сторонних плагинов для отображения ценБыстрое решение без программированияМожет конфликтовать с другими плагинами, нагрузка на сайт
Автоматизация импорта и обновления данных из внешних источников в WordPress
15.12.2025
WooCommerce: решение проблемы с некорректным отображением корзины при AJAX-обновлении
13.05.2026
Как использовать REST API для динамического получения данных в WordPress
08.12.2025
Оптимизация базы данных WordPress: практические советы
04.11.2025
Как создать динамическую таблицу с фильтрами в WordPress для удобного отображения данных
21.01.2026