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

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

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

  • В настройках товара включён ли учёт остатков (Inventory management)?
  • Установлен ли параметр "Разрешить заказы при отсутствии товара" (Allow backorders)?
  • Отображается ли остаток товара на странице карточки товара?

Для диагностики можно использовать следующий PHP код в файле темы functions.php или в плагине, чтобы вывести статус наличия:

add_action('woocommerce_single_product_summary', function() {
    global $product;
    if (!$product->is_in_stock()) {
        echo '<p style="color:red;">Товар отсутствует на складе</p>';
    } else {
        echo '<p style="color:green;">Товар в наличии: ' . $product->get_stock_quantity() . '</p>';
    }
}, 20);

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

1. Включаем управление запасами

В админке WooCommerce перейдите в WooCommerce → Настройки → Товары → Управление запасами и убедитесь, что опция Включить управление запасами активирована.

2. Отключаем предзаказы (Backorders)

Для каждого товара в карточке товара на вкладке Запасы установите Разрешить заказы при отсутствии товара в значение Нет. Это гарантирует, что при нулевом или отрицательном остатке покупка невозможна.

3. Автоматическое скрытие кнопки "Добавить в корзину" при отсутствии товара

Чтобы улучшить UX, скройте кнопку добавления в корзину для отсутствующих товаров. Добавьте в functions.php следующий код:

add_filter('woocommerce_is_purchasable', function($purchasable, $product) {
    if (!$product->is_in_stock()) {
        return false;
    }
    return $purchasable;
}, 10, 2);

4. Отключение оформления заказа на уровне корзины

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

add_action('woocommerce_check_cart_items', function() {
    foreach (WC()->cart->get_cart() as $cart_item) {
        if (!$cart_item['data']->is_in_stock()) {
            wc_add_notice('В корзине есть товары, отсутствующие на складе. Пожалуйста, удалите их для оформления заказа.', 'error');
            break;
        }
    }
});

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

  • Перейдите на страницу товара с нулевым запасом. Кнопка "Добавить в корзину" должна отсутствовать.
  • Попробуйте добавить отсутствующий товар в корзину — это должно быть невозможно.
  • Добавьте в корзину товар в наличии, затем вручную добавьте отсутствующий товар в корзину (например, через REST API) и перейдите в корзину — должна появиться ошибка и кнопка оформления заказа должна быть заблокирована.

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

  • Ошибка: Кнопка "Добавить в корзину" продолжает отображаться на страницах отсутствующих товаров.
    Причина: Не отключен backorders, либо код не добавлен в functions.php, либо используется кэширование.
    Решение: Проверьте настройки backorders, очистите кэш сайта и браузера, убедитесь, что код работает (временно добавьте echo в функцию).
  • Ошибка: Ошибка в корзине при проверке отсутствия товара не появляется.
    Причина: Хук woocommerce_check_cart_items не срабатывает или конфликт с плагинами.
    Решение: Отключите другие плагины и протестируйте повторно, проверьте, что корзина содержит отсутствующий товар.

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

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

Сравнение методов отключения оформления заказа по наличию товара

МетодПлюсыМинусы
Настройка Backorders в админкеПростота, нативное решениеТребует ручной настройки для каждого товара
Код в functions.php для скрытия кнопкиАвтоматизация, единоразовый кодНе отключает оформление заказа на уровне корзины
Проверка корзины и блокировка оформления заказаМаксимальная защита от ошибокСложнее в реализации, требует тестирования
Оптимизация загрузки изображений в WordPress: эффективные методы и практические решения
25.11.2025
WooCommerce: автоматическое отключение оформления заказа при отсутствии товара
22.05.2026
Как отключить типы постов в WordPress: проблемное место и решение
28.03.2026
Как установить лимит на количество сообщений в формах WordPress
07.03.2026
Как добавить поддержку WebP в WordPress без плагинов
11.12.2025