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

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

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

Как определить неактивные товары для удаления

Под неактивными товарами чаще всего подразумеваются:

  • Товары с выключенным статусом публикации ('draft', 'pending', 'private').
  • Товары, которые не обновлялись или не продавались более определённого времени (например, 6 месяцев).
  • Товары с нулевым остатком на складе, которые не планируется пополнять.

Для автоматизации важна чёткая бизнес-логика и критерии, чтобы избежать удаления нужных товаров.

Пошаговое решение: автоматическое удаление неактивных товаров через WP-Cron

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

function wpsell_delete_inactive_products() {
    $args = array(
        'post_type' => 'product',
        'post_status' => array('draft', 'pending', 'private'),
        'date_query' => array(
            array(
                'column' => 'post_modified_gmt',
                'before' => '6 months ago',
            ),
        ),
        'posts_per_page' => -1,
        'fields' => 'ids',
    );

    $query = new WP_Query($args);
    if ($query->have_posts()) {
        foreach ($query->posts as $product_id) {
            wp_delete_post($product_id, true); // Полное удаление
        }
    }
}

2. Регистрируем WP-Cron задачу для периодического запуска

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

add_action('wpsell_daily_product_cleanup', 'wpsell_delete_inactive_products');

3. Очистка WP-Cron при отключении темы или плагина

function wpsell_clear_product_cleanup_schedule() {
    $timestamp = wp_next_scheduled('wpsell_daily_product_cleanup');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpsell_daily_product_cleanup');
    }
}
register_deactivation_hook(__FILE__, 'wpsell_clear_product_cleanup_schedule');

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

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

  • Создайте тестовый товар со статусом 'draft' и датой последнего изменения старше 6 месяцев.
  • Запустите вручную cron задачу через WP-CLI: wp cron event run wpsell_daily_product_cleanup или подождите следующий запуск по расписанию.
  • Проверьте, что товар удалён из админки WooCommerce и базы данных (таблица wp_posts).

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

  • WP-Cron не запускается автоматически: на некоторых хостингах cron зависит от посещаемости сайта. Проверьте cron через плагин WP Crontrol или настройте системный cron.
  • Удаление не происходит из-за неправильных статусов: убедитесь, что в запросе указаны корректные статусы. Для проверки можно временно вывести ID товаров перед удалением.
  • Непреднамеренное удаление активных товаров: добавьте дополнительную проверку, например, по метаданным или наличию заказов, чтобы не удалить товары с историей продаж.

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

  • Всегда делайте резервные копии базы данных перед запуском автоматического удаления.
  • Для больших магазинов разбивайте удаление на порции, чтобы избежать таймаутов и блокировок БД.
  • Логируйте удалённые товары в отдельный файл, чтобы можно было отследить процесс и при необходимости восстановить удалённые позиции.
  • Используйте wp_delete_post($product_id, true) с параметром true, чтобы полностью удалить товар без перемещения в корзину.
  • Для более сложной логики удаления можно расширить функцию, учитывая остатки на складе через метаполя _stock и историю заказов WooCommerce.

Сравнение вариантов реализации удаления товаров

МетодПлюсыМинусы
WP-Cron + PHP кодГибкость, полная кастомизация, отсутствие сторонних плагиновЗависимость от правильной настройки WP-Cron, требует навыков разработки
Плагины очистки каталога (например, "Bulk Delete")Простота настройки, UI, фильтрыМогут быть избыточны, влияют на производительность, не всегда подходят под точные задачи
Ручное удаление через админкуПолный контроль, минимальный риск ошибокВремязатратно, не подходит для больших каталогов
Как добавить вывод стоимости отсутствующих товаров в корзине WooCommerce
01.05.2026
Как создать автоматический импорт товаров WooCommerce с помощью WPSell
02.03.2026
Создаем и оптимизируем кэш в WordPress своими руками: практическое руководство
04.12.2025
Как установить виджеты в WordPress с помощью WPCommunity
07.02.2026
Как использовать хук WooCommerce для обновления метаданных заказа на этапе оформления
05.05.2026

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