Как изменить количество товара при добавлении в корзину в WooCommerce

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

По умолчанию WooCommerce добавляет в корзину ровно один экземпляр товара при нажатии кнопки "Добавить в корзину". Иногда требуется изменить это поведение: например, автоматически добавить несколько единиц товара, изменить количество на основе пользовательских условий или ограничить минимальный заказ. В статье разберём, как программно управлять количеством добавляемого товара.

Пошаговое решение: изменение количества товара при добавлении в корзину

Использование хука woocommerce_add_to_cart_quantity

Этот хук позволяет изменить количество товара, которое будет добавлено в корзину. Пример, где количество всегда равно 3:

add_filter('woocommerce_add_to_cart_quantity', function($quantity, $product_id) {
    return 3; // добавляем 3 единицы товара
}, 10, 2);

Параметры функции:

  • $quantity — исходное количество (обычно 1)
  • $product_id — ID товара

Изменение количества в зависимости от ID товара

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

add_filter('woocommerce_add_to_cart_quantity', function($quantity, $product_id) {
    $target_products = array(25, 48); // ID товаров
    if (in_array($product_id, $target_products)) {
        return 5; // для товаров 25 и 48 — 5 штук
    }
    return $quantity; // для остальных — без изменений
}, 10, 2);

Изменение количества на основе пользовательского выбора

Можно передавать дополнительный параметр с формой, например, использовать $_POST['custom_quantity']:

add_filter('woocommerce_add_to_cart_quantity', function($quantity, $product_id) {
    if (!empty($_POST['custom_quantity']) && is_numeric($_POST['custom_quantity'])) {
        $custom_qty = intval($_POST['custom_quantity']);
        if ($custom_qty > 0) {
            return $custom_qty;
        }
    }
    return $quantity;
}, 10, 2);

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

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

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

  • Хук не срабатывает: убедитесь, что используете правильный приоритет и количество аргументов (10, 2).
  • Количество не меняется, несмотря на код: возможно, другие плагины или тема перезаписывают это значение. Проверьте конфликты, временно отключив другие плагины.
  • Неправильное количество добавляется: проверьте логику в callback-функции и входящие данные, особенно при использовании $_POST.

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

  • Всегда валидируйте и фильтруйте пользовательский ввод из $_POST, чтобы предотвратить XSS и другие атаки.
  • Не используйте хук для массового изменения количества без явной необходимости — это может сбивать пользователей с толку.
  • Тестируйте изменения на staging-сервере, чтобы избежать сбоев в работе интернет-магазина.

Сравнение способов изменения количества товара при добавлении в корзину

СпособПреимуществаНедостатки
Фильтр woocommerce_add_to_cart_quantityПростой, гибкий, не требует создания плагинаМожет конфликтовать с другими плагинами, не всегда очевидно для пользователей
Пользовательское поле формы с передачей количестваПозволяет пользователю выбирать количествоТребует дополнительной валидации и доработки фронтенда
Использование плагинов для расширенной логики корзиныМножество настроек и правил без кодаМожет влиять на производительность, требует обновлений

Сервис определения шаблона и плагинов на сайте