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

Диагностика задачи: зачем менять цену автоматически при изменении количества

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

Как реализовать автоматическое изменение цены в корзине

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

Пошаговое решение с примером кода

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

add_action('woocommerce_before_calculate_totals', 'custom_dynamic_price_based_on_quantity', 20, 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 ) {
        $quantity = $cart_item['quantity'];
        $product = $cart_item['data'];
        $base_price = $product->get_regular_price();

        // Пример логики: при покупке от 10 штук цена со скидкой 10%
        if ( $quantity >= 10 ) {
            $new_price = $base_price * 0.9; // скидка 10%
        } elseif ( $quantity >= 5 ) {
            $new_price = $base_price * 0.95; // скидка 5%
        } else {
            $new_price = $base_price; // базовая цена
        }

        $product->set_price( $new_price );
    }
}

В этом примере цена товара меняется в зависимости от количества: от 5 до 9 штук — скидка 5%, от 10 и больше — 10%. При меньших количествах цена не меняется.

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

  • Добавьте товар в корзину и измените количество: от 1 до 4 — цена не меняется, от 5 до 9 — цена должна стать на 5% ниже, от 10 и более — на 10% ниже.
  • Обновите корзину и убедитесь, что итоговая сумма пересчиталась корректно.
  • Проверьте на странице оформления заказа, что цены совпадают с расчетом в корзине.

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

  • Цена не меняется: Проверьте, что хук woocommerce_before_calculate_totals срабатывает, и код не находится в административной части без AJAX.
  • Цена сбрасывается при обновлении страницы: Убедитесь, что вы не используете функции, которые сбрасывают цену после подсчета, и что цена изменяется только в нужном хуке.
  • Конфликты с кешированием: При использовании плагинов кеша очистите кеш после внедрения изменений или отключите кеширование для страниц корзины и оформления заказа.
  • Неправильный расчет с вариативными товарами: Для вариативных товаров используйте $product->get_regular_price(), а не $product->get_price(), чтобы брать базовую цену вариации.

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

  • Не меняйте цену товара глобально, изменяйте цену только в объекте товара в корзине — так не затронется основная цена продукта в каталоге.
  • Используйте кеширование результатов, если логика сложная и зависит от внешних данных.
  • Проверяйте, что пользователь не может обойти скидки или наценки через прямое изменение данных формы — все должно рассчитываться на сервере.
  • Тестируйте на разных устройствах и браузерах, так как корзина часто обновляется через AJAX.

Сравнение способов изменения цены в WooCommerce

МетодПлюсыМинусы
Использование woocommerce_before_calculate_totalsГибко, легко адаптировать, работает для всех товаровТребует программирования, возможны конфликты с другими плагинами
Плагины для динамического ценообразованияПростота настройки, готовый функционалМожет быть дорого, лишний код, ограниченная гибкость
Изменение цены через JavaScriptБыстрое визуальное изменениеНе безопасно, легко обходится, не меняет цену на сервере
Как удалить старые ревизии постов WordPress по расписанию
15.03.2026
Как удалить записи и метаданные в WordPress без плагинов
06.01.2026
WooCommerce: автоматическое изменение цены продукта при изменении количества в корзине
16.06.2026
WooCommerce: автоматическое изменение цены продукта при добавлении в корзину
08.05.2026
WooCommerce: автоматическое изменение ставки налога при разных условиях
30.06.2026