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

Диагностика проблемы: почему стандартное поведение WooCommerce не всегда удобно

По умолчанию в WooCommerce цена товара на странице товара и в корзине отображается с учетом базовой стоимости без явного динамического обновления на стороне клиента при изменении количества. Это может вызывать неудобства для покупателей, особенно если цена товара зависит от количества, скидок или специальных условий. У многих возникает задача — сделать так, чтобы стоимость товара автоматически менялась на странице, сразу показывая итог без перезагрузки.

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

Пошаговое решение: динамическое обновление стоимости товара с помощью AJAX

1. Добавление JavaScript для отслеживания изменения количества

Для начала нужно добавить скрипт, который будет слушать изменение количества и отправлять AJAX-запрос для получения новой цены.

jQuery(document).ready(function($) {
    $('input.qty').on('change keyup', function() {
        var qty = $(this).val();
        var productId = $('form.cart').find('input[name="product_id"]').val();
        if (qty < 1) qty = 1;

        $.ajax({
            url: wc_add_to_cart_params.ajax_url,
            type: 'POST',
            data: {
                action: 'get_dynamic_price',
                product_id: productId,
                quantity: qty
            },
            success: function(response) {
                if(response.success) {
                    $('.woocommerce-Price-amount.amount').first().html(response.data.price_html);
                }
            }
        });
    });
});

2. Создание PHP-обработчика AJAX запроса

В functions.php вашей темы или в плагине добавьте следующий код, который будет принимать запрос, вычислять цену с учетом количества и возвращать HTML с обновленной ценой.

add_action('wp_ajax_get_dynamic_price', 'get_dynamic_price_callback');
add_action('wp_ajax_nopriv_get_dynamic_price', 'get_dynamic_price_callback');

function get_dynamic_price_callback() {
    $product_id = intval($_POST['product_id']);
    $quantity = intval($_POST['quantity']);

    if ($product_id <= 0 || $quantity <= 0) {
        wp_send_json_error();
    }

    $product = wc_get_product($product_id);
    if (!$product) {
        wp_send_json_error();
    }

    // Получаем цену с учетом количества (например, базовая цена * количество)
    $price = $product->get_price() * $quantity;

    // Форматируем цену с валютой
    $price_html = wc_price($price);

    wp_send_json_success(array('price_html' => $price_html));
}

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

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

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

  • AJAX не работает (нет ответа от сервера): Проверьте, что wc_add_to_cart_params.ajax_url доступен, и что файл functions.php корректно подключен. Убедитесь, что хуки wp_ajax_ и wp_ajax_nopriv_ добавлены.
  • Цена не обновляется в интерфейсе: Возможно, селектор .woocommerce-Price-amount.amount не совпадает с вашим шаблоном. Используйте инструменты разработчика браузера, чтобы уточнить правильный CSS-селектор.
  • Некорректное вычисление цены: Если у вас сложные цены с вариациями, скидками или пользовательскими ценами, нужно дополнительно учитывать эти условия в обработчике на PHP.

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

  • Кэшируйте результаты вычислений цены, если расчет сложный — можно использовать set_transient для временного хранения.
  • Обязательно проверяйте входящие данные на стороне сервера (intval, sanitization), чтобы предотвратить SQL-инъекции и другие атаки.
  • Ограничьте частоту AJAX запросов на стороне клиента, например, с помощью дебаунса (setTimeout), чтобы избежать чрезмерной нагрузки при быстром вводе.
  • Если у вас сложная логика ценообразования, рассмотрите использование готовых плагинов для динамического ценообразования в WooCommerce.

Сравнение вариантов реализации

СпособПлюсыМинусыРекомендации
Кастомный AJAX код (как в статье) Полный контроль, легковесность, подходит для простых задач Требует навыков PHP и JS, не учитывает сложные скидки и вариации Для простых товаров и базовой логики ценообразования
Плагины динамического ценообразования Готовые решения с поддержкой скидок, вариаций, правил Могут быть тяжелее, менее гибкие в кастомизации Если нужна сложная логика без разработки
WooCommerce: как автоматически изменять стоимость товара при изменении количества
04.06.2026
Как удалить и решить проблему загрузки библиотек jQuery в WordPress
18.03.2026
WooCommerce: как добавить пользовательское поле в форму оформления заказа
23.05.2026
Как создать собственный REST API endpoint в WordPress
13.11.2025
Как изменить URL страницы в WordPress без перенаправления
30.11.2025