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

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

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

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

1. Подключение фильтра для изменения цены в корзине

Для изменения цены товара в корзине используется фильтр woocommerce_before_calculate_totals. Он вызывается перед пересчётом итогов корзины и позволяет модифицировать цены товаров в ней.

2. Пример кода для изменения цены в зависимости от количества

add_action('woocommerce_before_calculate_totals', 'custom_dynamic_price_by_quantity', 20, 1);function custom_dynamic_price_by_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'];        $regular_price = $product->get_regular_price();        // Пример логики изменения цены:        // Если количество от 3 до 5 - скидка 10%        if ( $quantity >= 3 && $quantity <= 5 ) {            $new_price = $regular_price * 0.9;        } elseif ( $quantity > 5 ) {            // Если больше 5 штук - скидка 20%            $new_price = $regular_price * 0.8;        } else {            $new_price = $regular_price; // Без изменений        }        $product->set_price( $new_price );    }}

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

3. Добавление уведомления о скидке в корзине

Пользователю важно видеть условия скидок. Для этого можно добавить текст в корзину с помощью хука woocommerce_before_cart:

add_action('woocommerce_before_cart', 'custom_notice_discount_info');function custom_notice_discount_info() {    echo '<div class="woocommerce-message">Скидка 10% при покупке от 3 до 5 единиц, 20% при покупке более 5</div>';}

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

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

  • Добавьте в корзину товар в количестве 1 шт — цена должна быть стандартной.
  • Измените количество на 3–5 — цена товара должна уменьшиться на 10%.
  • Увеличьте количество больше 5 — цена должна уменьшиться на 20%.
  • Проверьте, что итоговая сумма в корзине корректно пересчитывается.
  • Убедитесь, что уведомление о скидках отображается над корзиной.

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

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

  • Цена не меняется: проверьте, что хук woocommerce_before_calculate_totals подключён с приоритетом не ниже 20, иначе другие плагины могут перезаписать цену.
  • Цена меняется и остается после оформления заказа: убедитесь, что вы меняете цену товара только в корзине, а не в базе данных. Используйте $product->set_price() только в контексте корзины.
  • Конфликты с кэшированием: очистите кэш сайта и браузера, отключите плагины кэширования на время тестирования.
  • Изменение цены не учитывается в мини-корзине: убедитесь, что мини-корзина обновляется через AJAX после изменения количества.

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

  • Не сохраняйте динамическую цену в мета данных товара — это может привести к рассинхронизации и ошибкам.
  • Оптимизируйте код фильтра — избегайте тяжелых запросов и вычислений внутри цикла.
  • Если нужна более сложная логика скидок, рассмотрите использование WooCommerce Dynamic Pricing плагинов, но помните о нагрузке.
  • Проверяйте совместимость с другими плагинами, влияющими на цены и корзину.

Сравнение вариантов реализации динамических скидок

Метод Плюсы Минусы
Код на хуках (пример выше) Гибкость, нет дополнительных плагинов, полный контроль Требуется навыки разработки, возможны ошибки при обновлениях
Плагины динамического ценообразования Простота настройки, готовые правила, поддержка Нагрузка на сайт, ограниченная кастомизация, стоимость
Изменение цены через пользовательские поля товара Возможность задавать индивидуальные цены Сложность интеграции с корзиной, может запутать пользователей
Как установить ограничения на загрузку файлов в WordPress
15.04.2026
Как правильно удалить плагин в WordPress без остаточных данных
30.12.2025
Как отладить проблемы с AJAX в WordPress
17.11.2025
Как избежать конфликтов между плагинами в WordPress: практические советы
12.12.2025
Как установить ограничения по ролям в WordPress: практическое руководство
11.04.2026