WooCommerce: как изменить стоимость товара в зависимости от суммы в корзине

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

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

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

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

Пример кода для изменения цены товара при сумме корзины больше 5000 рублей

add_action('woocommerce_before_calculate_totals', 'custom_change_price_based_on_cart_total', 10, 1);
function custom_change_price_based_on_cart_total($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return;
    
    // Получаем текущую сумму корзины без учета скидок
    $cart_total = $cart->get_subtotal();

    // Устанавливаем порог для изменения цены
    $threshold = 5000;

    // Проходим по всем товарам и меняем цену
    foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
        $product = $cart_item['data'];
        $original_price = $product->get_regular_price();

        if ($cart_total > $threshold) {
            // Допустим, делаем скидку 10%
            $new_price = $original_price * 0.9;
        } else {
            $new_price = $original_price; // обычная цена
        }

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

Пошаговое решение для внедрения

  1. Добавьте приведённый код в файл functions.php вашей дочерней темы или в кастомный плагин.
  2. Очистите кеш сайта и браузера, если используется кеширование.
  3. Добавьте товары в корзину на сумму выше и ниже 5000 рублей, чтобы проверить работу изменения цены.
  4. Проверьте отображение цен на страницах корзины, оформления заказа и в email-уведомлениях.

Как проверить, что изменение цены работает

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

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

  • Цена не меняется в корзине: проверьте, что хук подключён с правильным приоритетом и что код не блокируется условием is_admin().
  • Изменения цены не отражаются в заказах: убедитесь, что цена меняется именно в объекте продукта корзины, а не в базе данных.
  • Конфликты с другими плагинами скидок: отключите другие плагины, которые модифицируют цены, чтобы проверить взаимодействие.
  • Проблемы с кешированием: временно отключите кеширование страниц и WooCommerce transient cache.

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

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

Сравнение подходов: плагин vs код

МетодПлюсыМинусы
Код в functions.phpТочный контроль, отсутствие лишних плагинов, гибкость настройкиТребует навыков программирования, возможны баги при ошибках кода
Плагины динамического ценообразованияПростота настройки, готовые функции, поддержкаНагрузка на сайт, возможные конфликты, стоимость лицензий
Как отключить AJAX в WooCommerce без потери функциональности
26.05.2026
Как создать динамические формы регистрации в WordPress с помощью AJAX
18.01.2026
Как добавить динамические метаданные в WordPress для улучшения SEO
12.03.2026
WooCommerce: установка и настройка платёжного шлюза Яндекс.Касса
06.07.2026
WooCommerce: как изменить стоимость товара по времени с помощью WP-Cron
30.06.2026