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

В чем суть задачи автоматического отключения товаров в WooCommerce

Иногда необходимо, чтобы товар автоматически становился "недоступным" (выключался) после того, как он был продан — например, при продаже уникальных товаров или ограниченных партий. Это позволит избежать ситуации, когда покупатель оформляет заказ на товар, который уже распродан.

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

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

Проверьте, что в вашем магазине не реализована автоматическая блокировка товара после первой успешной продажи. Это можно сделать так:

  • Оформите тестовый заказ на товар с количеством 1;
  • Завершите оплату;
  • Проверьте, доступен ли товар для покупки вновь;
  • Если товар доступен, значит автоматическое отключение не работает.

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

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

Реализуем функцию, которая после успешной оплаты заказа проверит количество товара и, если остаток равен нулю, сменит статус товара на "черновик" или "вне продажи".

1. Добавляем код в functions.php вашей темы или в кастомный плагин

add_action('woocommerce_order_status_completed', 'auto_disable_product_after_sale');
function auto_disable_product_after_sale( $order_id ) {
    if ( ! $order_id ) return;

    $order = wc_get_order( $order_id );
    if ( ! $order ) return;

    foreach ( $order->get_items() as $item_id => $item ) {
        $product_id = $item->get_product_id();
        $product = wc_get_product( $product_id );

        if ( ! $product || ! $product->managing_stock() ) continue;

        $stock_quantity = $product->get_stock_quantity();

        // Если остаток равен 0 или меньше
        if ( $stock_quantity <= 0 ) {
            // Меняем статус товара на черновик
            $product_post = [
                'ID' => $product_id,
                'post_status' => 'draft',
            ];
            wp_update_post( $product_post );
        }
    }
}

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

2. Кастомизация под нужный статус

Вместо "draft" можно использовать статус "private" или пользовательский статус, в зависимости от ваших задач.

Проверка результата

  • Создайте товар с количеством 1;
  • Оформите заказ и доведите его до статуса "завершен";
  • Обновите страницу товара в админке — статус должен смениться на "черновик";
  • Попробуйте открыть страницу товара на сайте — он должен быть недоступен для покупателей.

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

  • Статус заказа не "completed": В некоторых магазинах используется другой статус, например, "processing". В этом случае замените хук на woocommerce_order_status_processing или добавьте дополнительный хук.
  • У товара не включено управление запасами: Если у товара не включено управление складом (manage stock), функция пропустит его, нужно включить управление запасами в настройках товара.
  • Кэширование мешает обновлению статуса: Очистите кэш сайта и браузера после обновления кода.
  • Изменение статуса товара не применяется: Проверьте, что пользователь, под которым выполняется код, имеет права на редактирование постов.

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

  • Не вставляйте код напрямую в functions.php в публичных темах — лучше использовать дочернюю тему или собственный небольшой плагин.
  • Добавьте проверку nonce и прав пользователя, если планируете расширять функционал для админ-панели.
  • Если в магазине много заказов и товаров, используйте transient cache для оптимизации запросов stock_quantity.
  • Периодически проверяйте логи ошибок сервера для выявления проблем с хуками.

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

ВариантПлюсыМинусыСложность
Код через хук woocommerce_order_status_completedБыстрая кастомизация, нет плагиновТребует навыков PHP, возможны ошибкиСредняя
Плагин автоматического управления запасамиПростота установки, готовый функционалМожет быть избыточным, нагрузкаНизкая
Ручное отключение товара после продажиМаксимальный контрольРучной труд, риск ошибкиНизкая
Как отключить Gutenberg и вернуть классический редактор в WordPress
17.01.2026
Как автоматизировать создание резервных копий в WordPress
05.02.2026
WooCommerce: как автоматически отключать товары после распродажи
23.06.2026
Как удалить ненужные meta-теги в WordPress для оптимизации сайта
04.12.2025
Как удалить или изменить атрибуты img в WordPress без плагинов
19.02.2026