Диагностика проблемы: почему нужно отключать оформление заказа при отсутствии товара
В стандартном WooCommerce возможность оформления заказа доступна даже если товар отсутствует на складе (stock quantity = 0), при условии, что включена опция «Разрешить предзаказы» или просто не настроено ограничение. Это может привести к недовольству клиентов и росту количества отмененных заказов.
Проверить, как ведет себя ваш магазин:
- Откройте страницу товара с нулевым остатком;
- Если кнопка «Добавить в корзину» активна, значит оформление заказа возможно;
- Если нет, то возможно включены настройки ограничения или используются сторонние плагины.
Как отключить оформление заказа при отсутствии товара: пошаговое решение
1. Проверка базовых настроек WooCommerce
В админке WooCommerce зайдите в WooCommerce → Настройки → Продукты → Запасы. Проверьте:
- Включена ли опция Включить управление запасами;
- Убедитесь, что опция Разрешить предзаказы отключена или настроена правильно;
- Параметр Отключить оформление заказа при отсутствии товара включен (если есть).
2. Добавление кода для автоматического отключения кнопки "Добавить в корзину" при отсутствии товара
Если стандартных настроек недостаточно, добавьте следующий код в файл functions.php вашей дочерней темы или в собственный плагин:
add_filter('woocommerce_is_purchasable', 'disable_purchase_if_out_of_stock', 10, 2); function disable_purchase_if_out_of_stock($purchasable, $product) { if (!$product->is_in_stock()) { return false; } return $purchasable; }Этот фильтр полностью отключит возможность покупки товара, если он отсутствует на складе.
Проверка результата после внедрения
- Очистите кэш сайта и браузера;
- Перейдите на страницу товара с нулевым запасом;
- Убедитесь, что кнопка «Добавить в корзину» отсутствует или заменена на «Нет в наличии»;
- Попробуйте добавить товар в корзину — действие должно быть недоступно.
Частые ошибки и способы их устранения
- Код не работает, кнопка все равно активна: убедитесь, что в теме или плагинах нет переопределения шаблонов WooCommerce, которые принудительно выводят кнопку.
- Код вызывает ошибки PHP: проверьте правильность синтаксиса, используйте отладчик или включите WP_DEBUG;
- Включены предзаказы: если разрешены предзаказы, товары будут доступны для оформления, даже при отсутствии на складе. Отключите эту опцию, если хотите полностью блокировать заказ.
Практические советы по безопасности и производительности
- Добавляйте кастомный код через дочернюю тему или отдельный плагин, чтобы избежать потери при обновлении;
- Проверяйте совместимость с используемыми плагинами для управления запасами;
- Для больших магазинов с сотнями товаров используйте кэширование и CDN, чтобы минимизировать нагрузку от дополнительных проверок;
- Регулярно обновляйте WooCommerce и плагины — устаревший код может конфликтовать с кастомными решениями.
Сравнение вариантов реализации отключения оформления заказа
| Метод | Плюсы | Минусы | Пример кода |
|---|---|---|---|
| Настройки WooCommerce | Простота, без кода | Ограниченные возможности, не всегда отключает полностью | – |
Фильтр woocommerce_is_purchasable | Полный контроль, гибкость | Требуется базовый PHP, может конфликтовать с кастомными темами | В статье |
| Плагины управления запасами | Дополнительные функции, интеграция | Могут быть платными, усложняют систему | Зависит от плагина |