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

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

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

Как изменить цену товара в зависимости от количества: обзор подходов

Есть несколько способов реализовать такую функциональность:

  • Использование плагинов для скидок по количеству — быстрый, но не всегда гибкий способ.
  • Добавление кастомного кода в functions.php темы или в плагин — более точечное и контролируемое решение.

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

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

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

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) {
        $quantity = $cart_item['quantity'];
        $original_price = $cart_item['data']->get_regular_price();
        $new_price = $original_price;

        // Пример логики изменения цены
        if ($quantity >= 10 && $quantity < 20) {
            // Скидка 10% при покупке от 10 до 19 штук
            $new_price = $original_price * 0.9;
        } elseif ($quantity >= 20) {
            // Скидка 20% при покупке 20 штук и больше
            $new_price = $original_price * 0.8;
        }

        // Устанавливаем новую цену товара в корзине
        $cart_item['data']->set_price($new_price);
    }
}

Объяснение кода

  • Хук woocommerce_before_calculate_totals срабатывает до пересчёта итогов;
  • Обходим все товары в корзине;
  • В зависимости от количества товара задаём новую цену со скидкой 10% или 20%;
  • Используем set_price() для корректного отображения цены;
  • Игнорируем админскую сторону и AJAX-запросы, чтобы избежать конфликтов.

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

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

  1. Добавьте товар в корзину в количестве 1-9 штук — цена должна оставаться без изменений.
  2. Добавьте количество от 10 до 19 — цена должна уменьшиться на 10%.
  3. Добавьте 20 и более штук — цена снизится на 20%.
  4. Проверьте, что итоговая сумма в корзине и на странице оформления заказа соответствует новой цене.
  5. Проверьте отображение цены на фронтенде (корзина, мини-корзина, checkout).

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

  • Цена не меняется: возможно, код не подключён или указан с ошибкой. Проверьте файл functions.php и активность дочерней темы.
  • Цены меняются, но итоговая сумма не корректна: убедитесь, что хук woocommerce_before_calculate_totals используется правильно и приоритет установлен 10.
  • Изменения влияют на админку или AJAX-запросы: добавьте проверку if (is_admin() && !defined('DOING_AJAX')) return; в начале функции.
  • Конфликты с плагинами для скидок: отключите сторонние плагины и проверьте работу кода, затем подключайте по одному для выявления конфликтов.

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

  • Минимизируйте количество операций в цикле по корзине — тяжелые вычисления лучше делать вне цикла.
  • Не сохраняйте цену напрямую в базу данных, используйте set_price() для корректного обновления сессии и отображения.
  • Для более сложных правил рассмотрите использование transient API для кеширования расчетов.
  • Проверяйте совместимость с WooCommerce и WordPress после обновлений.

Альтернативы: плагины vs код

МетодПреимуществаНедостатки
Плагины (например, WooCommerce Dynamic Pricing)Простота использования, готовые правила скидок, поддержкаМогут быть тяжелыми, платные, не всегда гибкие
Кастомный код (как в статье)Полный контроль, легковесность, кастомизация под любые задачиТребует навыков программирования, поддержка на себе
Как создать автоматический анализ и фильтровку спама в комментариях WordPress с помощью AI
11.02.2026
WooCommerce: автоматическое удаление неактивных заказов через код
21.05.2026
Автоматический анализ логов в WordPress: практические примеры и решения
04.01.2026
Автоматический генератор текстов для блоков Gutenberg с использованием AI в WordPress
28.02.2026
Автоматизация управления памятью в WordPress: практические решения и примеры
12.04.2026