WooCommerce: как автоматически отключать товары без остатков на складе

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

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

Как понять, что товары не отключаются при нуле остатков?

  • На странице каталога видны товары с количеством 0 и возможностью добавить их в корзину.
  • В админке WooCommerce в списке товаров статус — "В наличии", а количество равно 0.
  • Клиенты жалуются на невозможность оформить заказ по товару, который отображается как доступный.

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

Самый надежный способ — добавить кастомный код, который при обновлении запаса товара проверяет остаток и меняет статус товара на "черновик" или "нет в наличии".

Шаг 1. Подключение функции на хук сохранения товара

add_action('woocommerce_update_product', 'auto_disable_out_of_stock_product', 10, 1);
function auto_disable_out_of_stock_product($product_id) {
    $product = wc_get_product($product_id);
    if (!$product) return;

    $stock_quantity = $product->get_stock_quantity();
    $manage_stock = $product->managing_stock();

    if ($manage_stock && $stock_quantity <= 0) {
        // Меняем статус на 'draft' — товар скрыт из каталога
        $post = [
            'ID' => $product_id,
            'post_status' => 'draft'
        ];
        wp_update_post($post);
    }
}

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

Шаг 2. Добавление проверки для вариативных товаров

Для вариативных товаров нужно проверять остатки по всем вариантам:

add_action('woocommerce_update_product', 'auto_disable_out_of_stock_variable_product', 20, 1);
function auto_disable_out_of_stock_variable_product($product_id) {
    $product = wc_get_product($product_id);
    if (!$product || $product->get_type() !== 'variable') return;

    $variations = $product->get_children();
    $out_of_stock = true;

    foreach ($variations as $variation_id) {
        $variation = wc_get_product($variation_id);
        if ($variation->managing_stock() && $variation->get_stock_quantity() > 0) {
            $out_of_stock = false;
            break;
        }
    }

    if ($out_of_stock) {
        wp_update_post(['ID' => $product_id, 'post_status' => 'draft']);
    }
}

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

  • Обновите остаток товара через админку WooCommerce — установите 0 или меньше.
  • Обновите страницу каталога — товар должен исчезнуть из списка.
  • Проверьте статус товара в админке — должен быть "черновик".
  • Для вариативных товаров проверьте, что товар отключается только если все варианты без остатков.

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

  • Товары не скрываются: убедитесь, что код подключен в functions.php активной темы или в плагине, и что хук woocommerce_update_product срабатывает.
  • Статус товара меняется, но он все равно виден на сайте: проверьте кэш сайта и плагинов кэширования, очистите его.
  • Вариативные товары отключаются при наличии хотя бы одного варианта в наличии: проблема в логике проверки — убедитесь, что проверка идет по всем вариантам и отключение происходит только когда все варианты без стоков.
  • Нарушается логика отображения товаров с "разрешенным" заказом при отсутствии стока: если включена опция "Разрешить заказы при отсутствии стока", код нужно адаптировать для учета этого параметра.

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

  • Добавляйте код в дочернюю тему или в отдельный плагин, чтобы изменения не пропали при обновлении.
  • Используйте wc_get_product() для корректной работы с данными WooCommerce.
  • Обрабатывайте только измененные товары, чтобы избежать лишних вызовов и нагрузок.
  • Очищайте кэш после изменения статуса товара, чтобы изменения отображались клиентам.
  • Тестируйте на тестовом стенде перед внедрением на боевой сайт.

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

МетодОписаниеПлюсыМинусы
Код на хуке woocommerce_update_productАвтоматическое изменение статуса товара при обновленииПолный контроль, без сторонних плагиновТребуется базовый PHP, может не работать с импортом
Плагин для управления запасамиИспользование готового решения с настройкамиПростота настройки, поддержкаДополнительная нагрузка, возможные конфликты
Ручное управлениеОтключение товаров вручнуюПростота для малого ассортиментаНе подходит для больших магазинов, риск ошибки
WooCommerce: как автоматически отключать неактивные варианты товаров
21.09.2026
Как запретить индексацию страниц меток в WordPress без удаления самих меток
31.08.2026
Как удалить данные пользователя из базы WordPress без ошибок
27.09.2026
WooCommerce: автоматическое изменение стоимости товаров по расписанию без плагинов
20.09.2026
WooCommerce: как автоматически удалять неактивные варианты товаров по расписанию без плагинов
16.09.2026
×
-15%
на премиум-тему
Bono

Создай магазин мечты
на WordPress!

↓ ↓ ↓ ↓ ↓
Купить со скидкой »