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

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

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

Проверьте текущий статус товара и его количество на складе в админке WooCommerce. Если товар продолжает отображаться в каталоге и в продаже при нулевом или отрицательном остатке, значит автоматизация не настроена.

Как проверить текущий запас и статус товара

global $product;
$stock_quantity = $product->get_stock_quantity();
$is_in_stock = $product->is_in_stock();
error_log("Текущий запас: $stock_quantity, в продаже: " . ($is_in_stock ? 'да' : 'нет'));

Добавьте этот код в шаблон single-product.php или в файл функций, чтобы убедиться, что WooCommerce правильно видит количество и статус товара.

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

Основная идея — использовать хук woocommerce_product_set_stock, который вызывается при изменении запаса товара, и при достижении порога автоматически изменять статус товара на «черновик» или «вне продажи».

Код для автоматического отключения товара при запасе 0 и ниже

add_action('woocommerce_product_set_stock', 'auto_disable_product_by_stock', 10, 1);
function auto_disable_product_by_stock($product) {
    $stock_quantity = $product->get_stock_quantity();
    // Установите порог отключения
    $threshold = 0;

    if ($stock_quantity <= $threshold) {
        // Меняем статус на 'outofstock'
        $product->set_stock_status('outofstock');
        $product->save();
    } else {
        // Если запас восстановлен, возвращаем статус 'instock'
        $product->set_stock_status('instock');
        $product->save();
    }
}

Этот код автоматически меняет статус товара на «нет в наличии» при нулевом или отрицательном запасе, что исключает возможность покупки.

Как автоматически скрывать товары из каталога

Если нужно полностью скрыть такие товары из каталога, можно менять статус публикации:

add_action('woocommerce_product_set_stock', 'auto_hide_product_by_stock', 10, 1);
function auto_hide_product_by_stock($product) {
    $stock_quantity = $product->get_stock_quantity();
    $threshold = 0;

    $post_id = $product->get_id();

    if ($stock_quantity <= $threshold) {
        // Снимаем с публикации
        wp_update_post([
            'ID' => $post_id,
            'post_status' => 'draft'
        ]);
    } else {
        // Возвращаем в публикацию
        wp_update_post([
            'ID' => $post_id,
            'post_status' => 'publish'
        ]);
    }
}

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

1. Измените количество товара в административной панели WooCommerce на 0 и ниже.

2. Проверьте, что товар статус изменился на «нет в наличии» или стал черновиком (в зависимости от выбранного варианта).

3. Обновите страницу каталога и страницы товара на сайте — товар должен быть недоступен для покупки или скрыт.

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

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

  • Код не работает после обновления запаса: Проверьте, что используете правильный хук woocommerce_product_set_stock и что ваш код не конфликтует с другими плагинами управления запасами.
  • Товар остаётся в продаже при 0 запасе: Возможно, в настройках WooCommerce включена опция «Разрешить заказы в отсутствии товара» (Backorders). Перейдите в WooCommerce > Настройки > Товары > Запасы и отключите её.
  • Изменение статуса товара на черновик вызывает проблемы с SEO: Рассмотрите вариант только смены статуса на outofstock вместо изменения публикации, чтобы сохранить URL и SEO.
  • Кэширование не позволяет увидеть изменения сразу: Очистите кэш сайта и браузера, либо временно отключите кэш-плагины для теста.

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

  • Используйте минимально необходимый код и избегайте изменения статуса публикации, если не уверены, что это не повредит SEO.
  • Проверяйте совместимость с плагинами для управления запасами и сторонними расширениями WooCommerce.
  • Если на сайте много товаров и частые изменения запасов, добавьте ограничение на вызов функции, чтобы избежать лишних запросов к базе данных.
  • Для больших магазинов рекомендуется использовать cron-задачи или сторонние сервисы для управления статусами товаров, а не хук на изменение запаса.

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

ВариантОписаниеПлюсыМинусы
Изменение статуса запаса (stock_status)Товары меняют статус на «нет в наличии»Простая реализация, сохраняется URL, SEO не страдаетТовар виден, но нельзя купить — может путать клиентов
Изменение статуса публикации (post_status)Товар становится черновиком и скрывается с сайтаПолностью скрывает товар, нет путаницы для клиентовМожет повредить SEO и ссылки, требуется дополнительное управление
Использование плагинов (например, Clearfy Pro)Автоматизация с расширенными настройками и отчётамиУдобство, поддержка, дополнительные функцииДополнительная нагрузка, необходимость обновлений, стоимость

Подробные инструкции и примеры кода помогут адаптировать решение под конкретный магазин. Для дополнительной оптимизации и безопасности можно рассмотреть плагины из Clearfy Pro, которые упрощают управление дублирующимися товарами и статусами.

Как удалить кэш в WordPress: практическое руководство
30.03.2026
Как создать собственный шорткод в WordPress
23.11.2025
Как использовать хуки для оптимизации WordPress
09.12.2025
WooCommerce: как автоматически отключать товар после продажи
18.05.2026
WooCommerce: автоматическое создание купонов после успешной покупки
11.05.2026