Диагностика проблемы: почему товары с нулевым остатком остаются в каталоге
В стандартной установке WooCommerce товары с нулевым остатком не отключаются автоматически, если не активированы специальные настройки. Это приводит к тому, что покупатели видят товары, которые нельзя купить, что снижает удобство и может негативно повлиять на конверсию.
Чтобы проверить, есть ли у вас такая проблема, перейдите в админку WordPress > WooCommerce > Продукты и отфильтруйте товары по наличию (складской статус). Если товары с нулевым остатком отображаются как доступные для покупки, значит автоматическое отключение не работает.
Проверка настроек WooCommerce по управлению запасами
- В WooCommerce > Настройки > Товары > Запасы убедитесь, что опция "Включить управление запасами" активирована.
- Параметр "Разрешить заказы при отсутствии на складе" должен быть отключен, чтобы товары автоматически переходили в статус "Нет в наличии".
Пошаговое решение: как автоматически отключать товары с нулевым остатком
Если стандартных настроек недостаточно или вы хотите дополнительно скрывать такие товары из каталога, используйте следующий подход с кодом. Он автоматически переводит товар в статус "Черновик" при достижении нулевого остатка.
add_action('woocommerce_reduce_order_stock', 'auto_disable_product_on_zero_stock', 10, 1);
function auto_disable_product_on_zero_stock($order) {
foreach($order->get_items() as $item) {
$product = $item->get_product();
if(!$product) continue;
$stock_quantity = $product->get_stock_quantity();
if($stock_quantity === 0) {
// меняем статус на черновик, чтобы скрыть товар
$product_id = $product->get_id();
wp_update_post(array(
'ID' => $product_id,
'post_status' => 'draft'
));
}
}
}
Этот хук срабатывает после уменьшения запасов при оформлении заказа и отключает товары с нулевым остатком.
Дополнительный код для обратного включения товара при пополнении запасов
add_action('woocommerce_product_set_stock_status', 'auto_enable_product_on_stock', 10, 3);
function auto_enable_product_on_stock($product_id, $stock_status, $product) {
if('instock' === $stock_status) {
$post = get_post($product_id);
if($post->post_status === 'draft') {
wp_update_post(array(
'ID' => $product_id,
'post_status' => 'publish'
));
}
}
}
Проверка результата после внедрения
Чтобы убедиться, что автоматическое отключение работает:
- Создайте тестовый товар с ограниченным запасом (например, 1 шт).
- Оформите заказ, который уменьшит запас до 0.
- Проверьте в админке, что товар сменил статус на "Черновик" и исчез из каталога.
- Пополните запас товара вручную и убедитесь, что он снова появляется (статус "Опубликовано").
Частые ошибки и как их исправить
- Хук не срабатывает: Убедитесь, что код добавлен в functions.php темы или в плагин, который активен. Проверьте, что WooCommerce активен.
- Товары не скрываются из каталога: Статус должен быть именно
draftилиprivate. Статусoutofstockлишь помечает товар, но не скрывает. - Проблемы с кэшированием: Если используется кэш (например, плагин кеширования или CDN), очистите его после изменения статуса товара.
- Права пользователя: Для обновления статуса выполняемый код должен иметь права администратора. В стандартной среде темы это работает без проблем.
Практические советы по производительности и безопасности
- Не добавляйте лишних запросов к базе в циклах заказов — используйте встроенные методы WooCommerce.
- Добавляйте код в дочернюю тему или отдельный плагин, чтобы не потерять изменения при обновлении.
- Регулярно делайте бэкапы перед внесением изменений в код.
Сравнение подходов автоматического отключения товаров
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| Стандартные настройки WooCommerce | Запрет заказов при отсутствии на складе | Простая настройка без кода | Товары остаются в каталоге, могут вводить в заблуждение |
| Изменение статуса товара на "Черновик" через хук | Автоматическое отключение товаров с нулевым запасом | Товары полностью скрываются из каталога и поисковиков | Требует кастомного кода, возможны проблемы с кэшированием |
| Использование плагинов (например, Clearfy Pro) | Автоматизация управления запасами и видимостью товаров | Дополнительные функции, удобный интерфейс | Платное решение, нагрузка на сайт |