WooCommerce: как автоматически удалять товары без склада из каталога

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

В магазинах на WooCommerce часто возникает ситуация, когда товары заканчиваются на складе (stock quantity = 0), и их нужно оперативно скрывать или удалять из каталога, чтобы не вводить покупателей в заблуждение и повысить конверсию. Ручное удаление или скрытие таких товаров — трудоемкий процесс, особенно если товаров много.

Цель — автоматизировать удаление товаров, у которых нет доступного склада, чтобы они не отображались на витрине и в поиске.

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

1. Проверка настроек WooCommerce для управления запасами

Перед автоматизацией убедитесь, что в WooCommerce включено управление запасами:

WooCommerce → Настройки → Товары → Управление запасами → Включить управление запасами

Если управление запасами отключено, WooCommerce не отслеживает количество товара.

2. Использование WP-Cron для регулярной проверки товаров

Добавим в functions.php тему или в кастомный плагин следующий код. Он будет запускаться раз в сутки и удалять товары без наличия на складе.

function wpfaq_remove_out_of_stock_products() {
    $args = [
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'meta_query'     => [
            [
                'key'     => '_stock_status',
                'value'   => 'outofstock',
                'compare' => '=',
            ],
        ],
        'fields'         => 'ids',
    ];
    $query = new WP_Query($args);

    if (!empty($query->posts)) {
        foreach ($query->posts as $product_id) {
            wp_trash_post($product_id); // Отправляем товар в корзину
            // Если нужно окончательное удаление, используйте wp_delete_post($product_id, true);
        }
    }
}

// Регистрируем событие, если оно еще не создано
if (!wp_next_scheduled('wpfaq_daily_remove_outofstock')) {
    wp_schedule_event(time(), 'daily', 'wpfaq_daily_remove_outofstock');
}

add_action('wpfaq_daily_remove_outofstock', 'wpfaq_remove_out_of_stock_products');

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

Если удаление слишком радикально, можно менять статус товара на "черновик" для скрытия без удаления:

function wpfaq_hide_out_of_stock_products() {
    $args = [
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'meta_query'     => [
            [
                'key'     => '_stock_status',
                'value'   => 'outofstock',
                'compare' => '=',
            ],
        ],
        'fields'         => 'ids',
    ];
    $query = new WP_Query($args);

    if (!empty($query->posts)) {
        foreach ($query->posts as $product_id) {
            $post = [
                'ID'          => $product_id,
                'post_status' => 'draft',
            ];
            wp_update_post($post);
        }
    }
}

// Аналогично регистрируем событие
if (!wp_next_scheduled('wpfaq_daily_hide_outofstock')) {
    wp_schedule_event(time(), 'daily', 'wpfaq_daily_hide_outofstock');
}
add_action('wpfaq_daily_hide_outofstock', 'wpfaq_hide_out_of_stock_products');

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

  • Перейдите в админку WooCommerce → Товары и отфильтруйте по статусу "Корзина" или "Черновик" в зависимости от выбранного метода. Там должны появиться товары без склада.
  • Проверьте витрину сайта — товары без наличия не должны отображаться.
  • Для удаления — убедитесь, что товары ушли в корзину (wp_trash_post) или удалены (wp_delete_post).
  • Для скрытия — товары должны быть в статусе "черновик" и не показываться посетителям.

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

  • Товары не удаляются или не скрываются: Проверьте, включен ли WP-Cron (используйте плагин WP Crontrol для диагностики). Если сайт не получает трафик, задачи могут не запускаться.
  • Удаляются товары, которые должны быть в наличии: Проверьте мета-ключ _stock_status, иногда он может быть некорректным. Используйте также проверку _stock (количество на складе), чтобы точнее фильтровать товары.
  • Потеря SEO из-за удаления товаров: Вместо удаления лучше переводить товары в статус "черновик" или использовать плагин для редиректов, чтобы избежать 404 ошибок.
  • Высокая нагрузка на базу при большом количестве товаров: Делайте обработку партиями, например, по 100 товаров за раз, чтобы избежать тайм-аутов.

Практические советы по оптимизации и безопасности

  • Резервное копирование: Перед автоматическим удалением товаров создайте резервную копию базы данных, чтобы избежать потери данных.
  • Обработка по времени: Запускайте удаление в ночное время, чтобы минимизировать нагрузку на сервер.
  • Логирование: Для отладки добавьте логирование удаленных товаров, например, в файл через error_log() или отдельную таблицу.
  • Использование плагинов: Если не хочется писать код, плагин Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpfaq.ru&utm_medium=article&utm_campaign=woocommerce-avto-udaleniye-tovarov-bez-skada-iz-kataloga) предлагает инструменты для очистки каталога и управления товарами без склада.

Сравнение методов: удаление vs скрытие товаров без склада

МетодПреимуществаНедостаткиКогда использовать
Удаление (wp_trash_post/wp_delete_post)- Полное удаление из каталога и базы - Очистка базы от ненужных товаров- Потеря SEO, если не настроены редиректы - Невозможность быстрого восстановления без резервной копииЕсли товар больше не планируется продаваться и нет необходимости в архивации
Скрытие (перевод в статус "черновик")- Быстрое скрытие без потери данных - Можно легко вернуть товар в каталог- Товар сохраняется в базе, занимает место - Может потребоваться дополнительная фильтрация в поискеЕсли планируется вернуть товар в продажу или нужна история товара
WooCommerce: автоматическое изменение статуса заказа при отключении метода оплаты
30.06.2026
Как установить ограничения на регистрацию в WordPress по домену email
24.01.2026
Оценка и отзывы в WordPress: настройка и примеры реализации
01.02.2026
Как отключить Emoji в WordPress для ускорения сайта
27.01.2026
WooCommerce: решение проблемы с отображением товаров после обновления кеша
11.05.2026