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

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

В WooCommerce количество товаров в корзине нельзя просто обновить через прямое изменение значения в сессии или $_POST, поскольку это может привести к рассинхронизации данных и ошибкам в расчете стоимости заказа. Для корректного изменения количества товара нужно использовать встроенные хуки и функции WooCommerce.

Как понять, что количество не меняется корректно?

  • При попытке обновить количество товара через форму корзины или AJAX количество не меняется после обновления страницы.
  • Отсутствует пересчет стоимости товара и общего заказа.
  • В консоли браузера появляются ошибки JavaScript или нет ответа от сервера.

Пошаговое решение: изменение количества товара в корзине через хук WooCommerce

Ниже показано, как программно изменить количество товара в корзине с помощью фильтра 'woocommerce_add_to_cart_quantity' и функции обновления корзины.

add_filter('woocommerce_add_to_cart_quantity', 'custom_change_cart_quantity', 10, 2);
function custom_change_cart_quantity($quantity, $product_id) {
    // Например, всегда добавлять 3 единицы товара
    if ($product_id == 123) { // замените 123 на ID вашего товара
        return 3;
    }
    return $quantity;
}

// Обновление количества товара в корзине по событию AJAX или другим триггерам
add_action('wp_ajax_update_cart_quantity', 'update_cart_quantity_callback');
add_action('wp_ajax_nopriv_update_cart_quantity', 'update_cart_quantity_callback');
function update_cart_quantity_callback() {
    $cart_item_key = sanitize_text_field($_POST['cart_item_key']);
    $new_quantity = intval($_POST['quantity']);

    if ($cart_item_key && $new_quantity >= 0) {
        WC()->cart->set_quantity($cart_item_key, $new_quantity, true);
        WC()->cart->calculate_totals();
        wp_send_json_success(array('message' => 'Количество успешно обновлено'));
    } else {
        wp_send_json_error(array('message' => 'Неверные параметры'));
    }
    wp_die();
}

Использование AJAX для обновления количества товара в корзине

Для динамического обновления количества без перезагрузки страницы используйте следующий пример JavaScript с jQuery:

jQuery(document).on('change', '.cart-quantity input.qty', function() {
    var cart_item_key = jQuery(this).data('cart_item_key');
    var quantity = jQuery(this).val();

    jQuery.ajax({
        url: wc_cart_params.ajax_url,
        type: 'POST',
        data: {
            action: 'update_cart_quantity',
            cart_item_key: cart_item_key,
            quantity: quantity
        },
        success: function(response) {
            if(response.success) {
                // Обновить фрагменты корзины или страницу
                location.reload();
            } else {
                alert(response.data.message);
            }
        }
    });
});

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

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

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

  • Неверный cart_item_key: Ключ товара в корзине должен быть точным. Используйте WC()->cart->get_cart() для проверки.
  • Не подключен AJAX-обработчик: Забудьте добавить wp_ajax_ и wp_ajax_nopriv_ хуки.
  • Неправильная валидация входных данных: Всегда используйте sanitize_text_field и intval для безопасности.
  • Отсутствие пересчета корзины: После установки количества вызовите WC()->cart->calculate_totals().

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

  • Всегда проверяйте права пользователя перед изменением корзины, чтобы предотвратить несанкционированные действия.
  • Используйте nonce в AJAX-запросах для защиты от CSRF.
  • Не перезагружайте страницу без необходимости — обновляйте только нужные фрагменты через AJAX.
  • Избегайте прямого изменения глобальных переменных WooCommerce, используйте официальные методы API.
Как удалить пустые метаданные из базы WordPress для оптимизации
11.12.2025
Как создать автоматический отчет по активности пользователей в WordPress
14.02.2026
Оптимизация базы данных WordPress: практические советы и примеры кода
09.11.2025
Как удалить пустые таксономии и термины в WordPress
28.03.2026
Автоматизация управления пользовательскими ролями в WordPress
21.03.2026