Автоматическое удаление товаров WooCommerce при отсутствии на складе

Диагностика проблемы отсутствующих товаров на складе

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

Чтобы понять, есть ли необходимость в автоматическом удалении, проверьте, как WooCommerce обрабатывает статус наличия товаров:

  • Перейдите в «Товары» в админке и отфильтруйте товары по статусу наличия.
  • Проверьте настройки отображения отсутствующих товаров в «Настройки» > «Товары» > «Запасы».
  • Если товары отсутствуют, но остаются в каталоге, это может приводить к ошибкам и снижению конверсии.

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

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

1. Создаем функцию для удаления товаров без запаса

function wpelement_delete_out_of_stock_products() {
    // Параметры запроса товаров без запаса
    $args = array(
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'meta_query'     => array(
            array(
                'key'     => '_stock_status',
                'value'   => 'outofstock',
                'compare' => '=',
            ),
        ),
        'fields'         => 'ids',
        'post_status'    => 'publish',
    );

    $products = get_posts($args);

    if (!empty($products)) {
        foreach ($products as $product_id) {
            wp_delete_post($product_id, true); // true - удаляет без корзины
        }
    }
}

2. Добавляем запуск функции по расписанию (cron)

Чтобы процесс происходил автоматически, добавьте событие cron, которое будет запускаться, например, раз в сутки.

if (!wp_next_scheduled('wpelement_daily_delete_out_of_stock')) {
    wp_schedule_event(time(), 'daily', 'wpelement_daily_delete_out_of_stock');
}

add_action('wpelement_daily_delete_out_of_stock', 'wpelement_delete_out_of_stock_products');

3. Как вручную запустить функцию для теста

Для проверки функции можно вызвать ее напрямую из кода или через WP-CLI:

wpelement_delete_out_of_stock_products();

Или в консоли WP-CLI:

wp eval 'wpelement_delete_out_of_stock_products();'

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

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

  • В разделе «Товары» отсутствуют товары с _stock_status = outofstock.
  • Новые товары, переведённые в статус отсутствия на складе, автоматически удаляются через сутки.
  • Ошибки при загрузке страниц отсутствуют, сайт работает стабильно.

Для дополнительной проверки можно вывести список удалённых товаров в лог или отправить уведомление на e-mail (дополнительно).

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

  • Товары не удаляются. Проверьте, что cron-событие зарегистрировано и запускается. Используйте плагин WP Crontrol для диагностики.
  • Удаляются не те товары. Убедитесь, что запрос get_posts корректно фильтрует товары по мета-полю _stock_status с точным значением outofstock.
  • Удаление вызывает потерю данных. Параметр true в wp_delete_post удаляет товар без возможности восстановления. Для тестов используйте false.
  • Производительность при большом количестве товаров. Запрос posts_per_page = -1 может нагружать базу. Для крупных магазинов реализуйте пакетное удаление с пагинацией.

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

  • Добавьте проверку прав пользователя или ограничение по IP, если запускаете удаление вручную.
  • Для больших каталогов используйте WP-CLI и пакетное удаление, чтобы избежать таймаутов.
  • Перед массовым удалением создайте резервную копию базы данных.
  • В продакшн среде вместо полного удаления можно переводить товары в статус «черновик» для сохранения данных и возможности восстановления.
  • Если требуется комплексное управление запасами и удалением, рассмотрите интеграцию с системами 1С или складским ПО через API.

Сравнение способов удаления товаров без запаса

МетодПлюсыМинусыПример использования
Ручное удалениеПростота, контрольТрудозатратно при большом количествеЧерез админку WooCommerce
Автоматическое удаление через WP CronАвтоматизация, экономия времениРиск ошибок, нагрузка при большом каталогеPHP код + cron (пример в статье)
Использование плагиновУдобство, дополнительные настройкиЗависимость от стороннего кода, нагрузкаПлагины типа WP All Import + правила удаления
Как удалить неактивных пользователей в WordPress: эффективные методы и примеры
19.11.2025
Настройка автоматической очистки базы данных WordPress по расписанию
29.01.2026
Как автоматизировать удаление старых комментариев в WordPress
30.03.2026
Как использовать хуки для оптимизации WordPress: примеры и советы
17.12.2025
Как добавить поддержку WebP в WordPress без плагинов
25.02.2026