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

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

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

Диагностика проблемы

Если вы заметили, что цена товара в корзине не меняется при изменении количества, проверьте следующее:

  • Используется ли стандартная корзина WooCommerce без кастомных скриптов?
  • Отсутствуют ли конфликты с плагинами, которые изменяют цену или корзину?
  • Корректно ли обновляется сессия и AJAX-запросы при изменении количества?

Для теста откройте консоль браузера (F12), перейдите на вкладку Network и измените количество товара в корзине. Должен отправляться AJAX-запрос с обновлением корзины. Если запрос отсутствует или возвращается ошибка — проблема в JS или серверной части.

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

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

Используйте хук woocommerce_before_calculate_totals для изменения цены товара перед расчетом итогов:

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'];
        $original_price = $product->get_regular_price();

        // Пример: скидка 10% при покупке от 5 штук
        if ($quantity >= 5) {
            $new_price = $original_price * 0.9;
        } else {
            $new_price = $original_price;
        }

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

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

2. Обеспечение обновления цены без перезагрузки страницы

WooCommerce по умолчанию поддерживает AJAX-обновление корзины на странице корзины. Если вы используете кастомные шаблоны, убедитесь, что вызов функции wc_cart_fragments подключён, и кнопка обновления количества вызывает обновление корзины.

Если AJAX не срабатывает, добавьте в footer темы следующий код для включения необходимых скриптов:

add_action('wp_footer', function() {
    if (is_cart()) {
        wp_enqueue_script('wc-cart');
    }
});

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

  • Перейдите на страницу корзины
  • Измените количество товара, например, увеличьте до 5 и более
  • Нажмите кнопку обновления корзины (если нет автоматического обновления)
  • Проверьте, что цена товара изменилась согласно логике (например, стала на 10% меньше)
  • Просмотрите итоговую сумму - она должна соответствовать новым ценам

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

  • Цена не меняется при обновлении количества — проверьте, подключён ли хук woocommerce_before_calculate_totals, и не сбрасывается ли цена другим кодом после вашего фильтра.
  • Изменения цены влияют на другие страницы (например, архивы) — в функции обязательно проверяйте, что код работает только в корзине и на странице оформления заказа.
  • AJAX не обновляет корзину — убедитесь, что в шаблоне присутствуют вызовы do_action('woocommerce_cart_contents'); и подключены стандартные скрипты WooCommerce.
  • Конфликты с плагинами кеширования — исключите страницы корзины и оформления заказа из кеширования.

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

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

Сравнение способов реализации динамической цены в WooCommerce

МетодПлюсыМинусы
Код на хуке woocommerce_before_calculate_totals- Лёгкая настройка - Нет дополнительных плагинов - Полный контроль- Требует навыков программирования - Необходима проверка на совместимость
Плагины с динамическим ценообразованием (например, WooCommerce Dynamic Pricing)- Готовое решение - Множество условий и правил - Поддержка разработчиков- Стоимость лицензии - Возможные конфликты с кастомным кодом - Дополнительная нагрузка на сайт
Изменение цены через JavaScript на фронтенде- Быстрая реализация - Визуальное изменение без перезагрузки- Цена меняется только визуально - Риск несоответствия итоговой суммы на сервере - Небезопасно для учёта платежей

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как успешно перенести сайт на новый домен в WordPress: практическое руководство
18.03.2026
Как отключить PHP error notices в WordPress: практические решения
08.02.2026
WooCommerce: как использовать хуки для изменения стоимости товара в корзине
21.05.2026
WooCommerce: как изменить стоимость товара в корзине по условиям
05.07.2026
Как отключить автообновления тем и плагинов WordPress через функции
25.02.2026
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙