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

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

В интернет-магазинах на WooCommerce часто возникает ситуация, когда товар заканчивается на складе, но он продолжает отображаться в каталоге и позволяет оформить заказ. Это приводит к недовольству покупателей и лишним административным операциям по возвратам и отменам заказов.

Типичные признаки проблемы:

  • Товары со статусом "в наличии" показываются в магазине, хотя физически их нет.
  • Клиенты оформляют заказы на отсутствующий товар.
  • Администраторы вынуждены вручную менять статус товара или отменять заказы.

Для решения задачи необходимо автоматически менять статус товара (например, на "нет в наличии" или "скрыт"), а также предусмотреть возможность возврата товара, если он появился снова на складе.

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

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

Перейдите в WooCommerce > Настройки > Товары > Запасы и убедитесь, что опция Включить управление запасами активирована. Без этого WooCommerce не сможет отслеживать наличие товара.

2. Настройка статусов товара в зависимости от остатков

WooCommerce автоматически меняет статус товара на "нет в наличии", если количество на складе достигает нуля, но это поведение можно расширить для автоматического скрытия товара из каталога или даже смены статуса публикации.

3. Автоматическое скрытие товаров без наличия через код

Добавьте следующий код в файл functions.php вашей темы (лучше дочерней) или в отдельный плагин:

add_action('woocommerce_product_set_stock_status', 'auto_hide_out_of_stock_products', 10, 3);function auto_hide_out_of_stock_products($product_id, $stock_status, $product) {    // Проверяем, если товар нет в наличии    if ($stock_status === 'outofstock') {        // Меняем статус публикации товара на черновик (скрываем из каталога)        $post = array(            'ID' => $product_id,            'post_status' => 'draft'        );        wp_update_post($post);    } elseif ($stock_status === 'instock') {        // Если товар снова в наличии, возвращаем статус публикации в 'publish'        $post = array(            'ID' => $product_id,            'post_status' => 'publish'        );        wp_update_post($post);    }}

Этот код слушает изменение статуса наличия и меняет публикацию товара, чтобы скрыть его из магазина при отсутствии на складе и вернуть обратно при появлении.

4. Обработка возврата товара

Если товар появился на складе, код автоматически вернёт статус публикации, делая товар видимым для покупателей.

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

Чтобы проверить, что решение работает:

  1. Уменьшите количество товара до 0 в админке WooCommerce (редактирование продукта).
  2. Обновите страницу каталога магазина — товар должен исчезнуть.
  3. Увеличьте количество товара до значения больше 0.
  4. Обновите страницу каталога — товар должен снова появиться.

Для более точной проверки можно использовать запросы к базе или WP CLI:

wp post status get <product_id>

Статус должен меняться между draft и publish.

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

  • Код не работает после обновления товара: проверьте, что включено управление запасами в настройках WooCommerce.
  • Товар не скрывается из каталога: возможно, тема или кэш сайта игнорируют статус публикации. Очистите кэш и проверьте шаблоны вывода.
  • Появляется ошибка при вызове wp_update_post: убедитесь, что нет конфликтующих плагинов, и что у пользователя есть права на редактирование постов.

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

  • Вместо изменения статуса публикации можно использовать фильтр pre_get_posts для скрытия товаров без смены статуса — это безопаснее, если не хотите менять публикацию.
  • Для больших магазинов с тысячами товаров автоматизация через хук woocommerce_product_set_stock_status не создаст нагрузку, но регулярное массовое обновление статусов лучше делать через WP CLI или планировщик задач.
  • Следите за правами доступа на изменение постов, чтобы избежать проблем с безопасностью.

Сравнение вариантов решения

ВариантОписаниеПлюсыМинусы
Изменение статуса публикации (draft/publish)Автоматически скрывает/показывает товарПростота реализации, товар полностью скрытМеняет статус поста, может повлиять на SEO и индексацию
Использование фильтра pre_get_postsФильтрация товаров в запросах без изменения постаНе влияет на статус публикации, безопасно для SEOТовар остается опубликованным, видим в админке
Плагины для управления наличиемИспользование готовых решений (например, WooCommerce Out of Stock Manager)Готовый функционал, поддержка обновленийМогут быть избыточны, влиять на производительность
Как установить ограничение на количество постов в выводах WordPress
04.02.2026
WooCommerce: автоматическое отключение товаров при отсутствии на складе с возможностью возврата
10.06.2026
WooCommerce: автоматическое удаление просроченных заказов
30.05.2026
Как сделать автоматический отзыв на комментарии в WordPress
10.04.2026
WooCommerce: автоматическое добавление товара в корзину при открытии страницы
20.05.2026