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

Диагностика проблемы: почему автоматическое отключение товаров важно

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

Задача – автоматически переключать статус товара на "черновик" или "скрытый" при отсутствии остатков и при этом сохранять возможность быстро вернуть товар в продажу, когда запасы появятся.

Как проверить, что автоматическое отключение товаров не работает

  • Откройте страницу товара с нулевым запасом и проверьте, отображается ли он в каталоге.
  • Перейдите в админке WooCommerce — Товары — и посмотрите статус товара (опубликован/черновик).
  • Проверьте, обновляются ли статусы товара после изменения остатка на складе.

Пошаговое решение: автоматизация статуса товара через хук WooCommerce

Используем хук woocommerce_product_set_stock, который срабатывает при обновлении остатков товара. Добавим функцию, которая проверит остаток и изменит статус товара.

add_action('woocommerce_product_set_stock', 'wpdemo_auto_disable_product_on_out_of_stock', 10, 1);
function wpdemo_auto_disable_product_on_out_of_stock($product) {
    if ( ! $product instanceof WC_Product ) {
        return;
    }
    $stock_quantity = $product->get_stock_quantity();
    $post_id = $product->get_id();

    // Проверяем, есть ли остаток
    if ($stock_quantity <= 0) {
        // Если товар опубликован, переводим его в черновик
        if (get_post_status($post_id) === 'publish') {
            wp_update_post([
                'ID' => $post_id,
                'post_status' => 'draft'
            ]);
        }
    } else {
        // Если товар есть в наличии и статус не опубликован, возвращаем публикацию
        if (get_post_status($post_id) !== 'publish') {
            wp_update_post([
                'ID' => $post_id,
                'post_status' => 'publish'
            ]);
        }
    }
}

Данный код автоматически переключает статус товара в "черновик" при отсутствии остатков и обратно в "опубликован" при появлении запасов.

Оптимизация: чтобы код работал только для продуктов с учетом управления запасами

if ( ! $product->managing_stock() ) {
    return;
}

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

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

  • В админке измените количество товара на 0 и сохраните.
  • Перейдите к списку товаров и убедитесь, что нужный товар стал черновиком и исчез из каталога.
  • Увеличьте остаток товара больше 0, сохраните.
  • Проверьте, что статус товара снова стал опубликован и он отображается в каталоге.

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

  • Код не срабатывает при обновлении остатка через сторонние импортеры: Некоторые импортеры напрямую меняют записи в базе без вызова хуков WooCommerce. Решение: запустить скрипт массовой проверки остатков и обновления статусов вручную или через WP-CLI.
  • Товар исчезает, но не появляется обратно при пополнении: Проверьте, что функция возвращает статус в "publish" при запасах > 0. Ошибка часто в логике условия.
  • Конфликты с другими плагинами, которые управляют статусами: Проверьте очередность действий и при необходимости используйте приоритеты в add_action (например, 20 вместо 10).

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

  • Не используйте тяжелые SQL-запросы внутри функции. Воспользуйтесь встроенными методами WC_Product и WP_Post.
  • Добавьте проверку managing_stock() для исключения лишних операций.
  • Для массовых обновлений запасов используйте WP-CLI или крон-задачи, чтобы не тормозить работу сайта.
  • Резервное копирование базы данных перед внедрением автоматизации — обязательное условие.

Сравнение способов реализации автоматического отключения товара

МетодПлюсыМинусыКомпромисс
Использование хука woocommerce_product_set_stockАвтоматизация в реальном времени; легкая реализация; не требует сторонних плагиновНе срабатывает при прямом изменении БД; зависит от WooCommerce APIДобавить периодическую проверку WP-CLI для синхронизации
Использование сторонних плагинов для управления статусамиГотовые решения; часто с настройками UIМогут нагружать сайт; не всегда гибкие; риск конфликтовИспользовать вместе с кастомным кодом для точной логики
Массовое обновление через WP-CLI скриптВысокая производительность; подходит для больших магазиновТребует знаний консоли; не подходит для реального времениКомбинировать с хуками для оперативного обновления
Как отключить автовоспроизведение видео в блоках Gutenberg WordPress
11.02.2026
Как запретить отображение изображений в WordPress для защиты от копирования
13.03.2026
Как удалить или скрыть стартовую страницу WordPress без плагинов
09.03.2026
WooCommerce: автоматическое удаление просроченных заказов с подтверждением
03.06.2026
Как изменить регистр текста в WordPress автоматически
02.03.2026