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

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

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

Проверьте, есть ли у вас товары с остатком 0 или с датами выпуска более 6 месяцев назад (или другой подходящий срок). Для этого в админке WooCommerce перейдите в Товары, отфильтруйте по количеству остатков и дате публикации.

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

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

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

function wc_auto_delete_out_of_stock_and_old_products() {
    // Параметры: товары с остатком 0 и старше 180 дней
    $args = array(
        'post_type' => 'product',
        'post_status' => 'publish',
        'date_query' => array(
            array(
                'before' => '180 days ago',
            ),
        ),
        'meta_query' => array(
            array(
                'key' => '_stock_status',
                'value' => 'outofstock',
            ),
        ),
        'posts_per_page' => -1,
        'fields' => 'ids',
    );

    $products = get_posts($args);
    if (!empty($products)) {
        foreach ($products as $product_id) {
            wp_delete_post($product_id, true); // жесткое удаление
        }
    }
}

2. Автоматизируем запуск с помощью WP-Cron

Добавьте расписание для запуска функции, например, ежедневно:

add_action('wc_daily_delete_products_event', 'wc_auto_delete_out_of_stock_and_old_products');

function wc_schedule_daily_product_deletion() {
    if (!wp_next_scheduled('wc_daily_delete_products_event')) {
        wp_schedule_event(time(), 'daily', 'wc_daily_delete_products_event');
    }
}
add_action('wp', 'wc_schedule_daily_product_deletion');

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

  • Проверьте, что в базе данных действительно удалились товары с остатком 0 и датой выпуска старше 180 дней.
  • В админке WooCommerce откройте список товаров и убедитесь, что ненужные позиции исчезли.
  • Для отладки добавьте временно логирование в функцию удаления:
function wc_auto_delete_out_of_stock_and_old_products() {
    $args = [...]; // как выше
    $products = get_posts($args);
    if (!empty($products)) {
        foreach ($products as $product_id) {
            error_log('Удаляем товар ID: ' . $product_id);
            wp_delete_post($product_id, true);
        }
    } else {
        error_log('Нет товаров для удаления');
    }
}

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

  • Функция не запускается регулярно: Проверьте, активирован ли WP-Cron. Если нет, настройте системный CRON на вызов wp-cron.php.
  • Удаляются не те товары: Убедитесь, что мета-ключ _stock_status существует и принимает значение outofstock. Можно проверить через базу данных или var_dump продуктов.
  • Удаление не происходит из-за прав: Запуск кода должен быть с правами администратора. Ошибки в логах помогут выявить проблемы с правами доступа.
  • Нагрузка на сервер при большом количестве товаров: Используйте постраничный разбивку (pagination) для выборки товаров и удаляйте не все сразу.

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

  • Настройте резервное копирование перед автоматическим удалением.
  • Используйте wp_delete_post с параметром true для полного удаления, включая метаданные.
  • Для больших магазинов реализуйте пакетное удаление по 50 товаров за один запуск, чтобы избежать таймаутов.
  • Тестируйте на staging-среде перед применением на рабочем сайте.

Альтернативные подходы: плагин vs код

МетодПлюсыМинусыРекомендации
Код (как в статье)Точный контроль, без сторонних зависимостей, кастомизацияТребует навыков, возможны ошибки при неправильном кодеДля разработчиков и кастомных решений
Плагин управления товарамиПростой интерфейс, готовые функции, поддержкаМожет нагружать сайт, меньше гибкости, платные версииДля пользователей без навыков программирования
Как автоматизировать удаление неактуальных значений опций в WordPress
20.02.2026
Как автоматически отправлять отзывы пользователей в WordPress
07.03.2026
Как создать уникальный файл robots.txt в WordPress для улучшения индексации
17.02.2026
WooCommerce: как устранить проблему дублирования заказов при повторной отправке формы
03.05.2026
Как удалить неиспользуемые метаданные в WordPress для ускорения сайта
10.11.2025