В чём заключается задача запрета изменения количества товаров в корзине WooCommerce?
Иногда требуется ограничить пользователя от изменения количества товаров в корзине, например, для фиксированных пакетов, акционных предложений или при продаже нестандартных товаров. WooCommerce по умолчанию выводит поле ввода количества, которое можно изменить. Нужно отключить возможность редактирования этого поля, оставив товар в корзине с фиксированным количеством.
Диагностика проблемы: как понять, что количество товаров можно изменить
Откройте корзину WooCommerce на фронтенде сайта. По умолчанию у каждого товара есть поле <input type="number" name="cart[...][qty]">. В нём можно менять число, затем обновлять корзину. Если при попытке изменить количество вы хотите запретить это действие, значит текущая конфигурация не подходит.
Дополнительно проверьте, не влияют ли плагины или тема на обработку корзины — иногда там отключают редактирование количества.
Пошаговое решение: как запретить изменение количества товаров в корзине
1. Уберите возможность редактирования поля количества в корзине через фильтр
В файле functions.php вашей темы или плагина добавьте следующий код, который заменит поле ввода количества на простой текст:
add_filter('woocommerce_cart_item_quantity', 'disable_quantity_input_in_cart', 10, 3);
function disable_quantity_input_in_cart($product_quantity, $cart_item, $cart_item_key) {
$quantity = $cart_item['quantity'];
return '<span class="disabled-quantity">' . $quantity . '</span>';
}Этот фильтр заменяет интерактивное поле на простой текст, который нельзя изменить.
2. Удалите кнопку «Обновить корзину» чтобы исключить попытки изменить количество
По умолчанию кнопка обновления корзины есть на странице корзины. Чтобы убрать её, добавьте:
add_action('woocommerce_proceed_to_checkout', 'remove_update_cart_button', 1);
function remove_update_cart_button() {
remove_action('woocommerce_cart_actions', 'woocommerce_cart_actions');
}Или удалите кнопку вручную из шаблона cart/cart.php в вашей теме.
3. Защитите обработчик обновления корзины от попыток изменить количество через POST-запрос
Даже если поле скрыть в интерфейсе, пользователь может отправить запрос вручную. Чтобы запретить изменение количества на сервере, можно перехватить запрос и сбросить значения:
add_filter('woocommerce_update_cart_validation', 'prevent_quantity_change_validation', 10, 4);
function prevent_quantity_change_validation($passed, $cart_item_key, $values, $quantity) {
$cart = WC()->cart->get_cart();
if (isset($cart[$cart_item_key])) {
$current_quantity = $cart[$cart_item_key]['quantity'];
if ($quantity != $current_quantity) {
// Запрещаем изменение количества
wc_add_notice('Изменение количества товара запрещено.', 'error');
return false;
}
}
return $passed;
}Такой фильтр блокирует обновление корзины, если количество отличается от текущего.
Проверка результата после внедрения
- Зайдите на страницу корзины, убедитесь, что поле количества не интерактивно, а отображается текстом.
- Проверьте, что кнопка «Обновить корзину» отсутствует (или неактивна).
- Попробуйте изменить количество через инструменты разработчика браузера и отправить форму — должна появиться ошибка, и количество не изменится.
Частые ошибки и как их исправить
- Поле количества всё ещё интерактивно. Проверьте, что код добавлен в правильный
functions.phpи не переопределяется другими плагинами или темой. - Кнопка обновления корзины не удаляется. Проверьте, не выводит ли её кастомный шаблон. В этом случае нужно править шаблон вашей темы.
- Ошибка не появляется при попытке изменить количество вручную. Возможно, фильтр
woocommerce_update_cart_validationне срабатывает из-за приоритета или кэширования — повысьте приоритет или очистите кэш.
Практические советы по безопасности и производительности
- Обязательно проверяйте серверную валидацию — клиентские ограничения легко обходятся.
- Если в вашей корзине есть товары с разными правилами, используйте условные проверки в фильтрах, чтобы применять запрет только к нужным товарам.
- По возможности избегайте переопределения шаблонов WooCommerce, чтобы не усложнять поддержку при обновлениях.
Сравнение вариантов реализации запрета изменения количества в корзине WooCommerce
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| Клиентская замена поля на текст | Скрыть поле ввода количества и вывести только число | Просто и быстро, пользователь не видит поле | Можно обойти через запросы вручную |
| Удаление кнопки обновления корзины | Убирает возможность отправить изменения количества | Снижает риск случайных изменений | Не защищает от прямых POST-запросов |
| Серверная валидация количества | Блокирует изменения на уровне сервера | Надёжно защищает от любых попыток изменения | Требует дополнительного кода, может конфликтовать с другими плагинами |