WooCommerce: автоматическое изменение стоимости товара при изменении количества

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

В стандартном WooCommerce цена товара фиксирована, и при изменении количества в корзине общая сумма пересчитывается автоматически. Однако, иногда требуется менять стоимость единицы товара в зависимости от количества — например, устанавливать скидку при покупке от определенного объема или наоборот увеличивать цену при малых партиях.

Как реализовать такую логику, чтобы цена товара на странице товара и в корзине менялась автоматически при изменении количества, без использования тяжеловесных плагинов?

Диагностика текущей ситуации

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

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

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

1. Изменение цены на странице товара через JavaScript

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

jQuery(document).ready(function($) {
    var basePrice = parseFloat($('.woocommerce-Price-amount.amount').first().text().replace(/[^0-9.,]/g, '').replace(',', '.'));
    $('#quantity').on('change keyup', function() {
        var qty = parseInt($(this).val());
        if (!qty || qty < 1) qty = 1;
        // Пример: скидка 10% при покупке от 5 штук
        var price = basePrice;
        if (qty >= 5) {
            price = basePrice * 0.9;
        }
        var total = price * qty;
        $('.woocommerce-Price-amount.amount').first().text(total.toFixed(2) + ' ₽');
    });
});

В этом примере при количестве 5 и более цена за единицу товара снижается на 10%, а итоговая сумма отображается в поле цены.

2. Изменение цены в корзине и на странице оформления заказа

Для корректного пересчета цены в корзине и на странице оформления заказа необходимо изменить итоговую стоимость позиции в PHP с помощью фильтров WooCommerce.

add_action('woocommerce_before_calculate_totals', 'custom_dynamic_price_based_on_quantity', 10, 1);
function custom_dynamic_price_based_on_quantity($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return;
    foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
        $qty = $cart_item['quantity'];
        $original_price = $cart_item['data']->get_regular_price();
        $new_price = $original_price;
        if ($qty >= 5) {
            // скидка 10% при покупке 5 и более
            $new_price = $original_price * 0.9;
        }
        $cart_item['data']->set_price($new_price);
    }
}

Этот код автоматически снижает цену каждого товара при покупке от 5 штук прямо в корзине и на странице оплаты.

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

  • Откройте страницу товара, измените количество на 5 или более и проверьте, что цена на странице обновляется автоматически.
  • Добавьте товар в корзину с разным количеством (меньше 5 и 5 и более), перейдите в корзину и проверьте, что цена пересчиталась с учетом скидки.
  • Проверьте, что итоговая сумма на странице оформления заказа соответствует пересчитанной цене.

Частые ошибки и их устранение

  • Цена не меняется на странице товара — возможно, селектор цены в скрипте не соответствует вашей теме. Проверьте HTML-код цены и скорректируйте селектор $('.woocommerce-Price-amount.amount').first().
  • Скидка не применяется в корзине — убедитесь, что хук woocommerce_before_calculate_totals используется правильно и что функция не прерывается в админке.
  • Цена сбрасывается после обновления страницы — JavaScript меняет только отображение, для постоянного изменения цены нужна серверная логика (PHP-код выше).
  • Проблемы с кешированием — если используется кеширование страниц, динамические изменения цены могут не отображаться. Настройте исключения для страниц товара и корзины.

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

  • В PHP-функции избегайте тяжелых операций, так как она вызывается при каждом пересчете корзины.
  • Для JavaScript используйте минимизированный и совместимый с темой скрипт, чтобы не ломать верстку.
  • Если требуется более сложная логика ценообразования, рассмотрите специализированные плагины, например, WooCommerce Dynamic Pricing, или интеграцию с WPShop Clearfy Pro для оптимизации и контроля.
  • Тестируйте на тестовом стенде перед применением на боевом сайте.

Сравнение подходов: плагин vs кастомный код

КритерийПлагин (например, WooCommerce Dynamic Pricing)Кастомный код (описанный выше)
ГибкостьВысокая, много настроекОграничена, нужно писать код
ПроизводительностьМожет нагружать сайтЛегкий, при правильной реализации
СтоимостьПлатныйБесплатный
Поддержка и обновленияЕстьЗависит от разработчика
Как изменить метод отправки формы в WordPress на AJAX без плагинов
15.09.2026
WooCommerce: автоматическое изменение стоимости товара при изменении количества
15.09.2026
Как отключить открытые XML-feeds в WordPress и проверить, что они не индексируются
25.09.2026
Как использовать Custom Post Types в WordPress для управления проектами
03.09.2026
Как автоматически удалять черновики старше 30 дней в WordPress
15.09.2026