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

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

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

Для диагностики можно использовать SQL-запросы или плагины, показывающие статистику товаров по статусам и дате последнего обновления. Например, запрос для подсчёта товаров без активности за последние 6 месяцев:

SELECT COUNT(*) FROM wp_posts 
WHERE post_type = 'product' 
AND post_status IN ('publish', 'draft', 'pending') 
AND post_modified < NOW() - INTERVAL 6 MONTH;

Если число слишком большое — пора очищать каталог.

Пошаговое решение: автоматизация удаления неактивных товаров через код

1. Определяем критерии неактивности

В качестве критерия возьмём товары, которые не обновлялись более 6 месяцев и имеют статус «draft» или «pending». Статус «publish» не трогаем, чтобы не удалить товары в продаже.

2. Создаём функцию для удаления

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

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

    $products = get_posts($args);

    if(empty($products)) {
        return;
    }

    foreach($products as $product_id) {
        wp_delete_post($product_id, true); // true - удаление навсегда
    }
}

3. Автоматизация через WP-Cron

Чтобы запускать очистку регулярно, добавим событие в WP-Cron:

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

add_action('wpnews_cleanup_inactive_products_hook', 'wpnews_delete_inactive_products');

Теперь функция удаления будет запускаться ежедневно.

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

  • Перейдите в админку WooCommerce → Товары и отфильтруйте по статусам «Черновик» и «Ожидает проверки».
  • Проверьте дату последнего изменения товаров — они должны быть удалены, если старше 6 месяцев.
  • Для мгновенного теста можно вызвать функцию вручную через wp shell или добавить временный вызов в код.
  • Проверьте логи ошибок — в случае проблем удаление не должно вызывать фатальных ошибок.

Частые ошибки и способы их исправления

  • Функция не запускается по расписанию: Проверьте, что WP-Cron работает. Стандартный WP-Cron запускается при посещении сайта, если трафика мало — добавьте системный cron-задание на вызов wp-cron.php.
  • Удаляются нужные товары: Убедитесь, что фильтр по статусам и дате корректен. Рекомендуется тестировать на стейджинг-сайте.
  • Проблемы с производительностью при большом числе товаров: Используйте постраничный удаление, например, posts_per_page => 50, и удаляйте партиями с паузами.
  • Нет уведомления об удалении: Добавьте логирование через error_log() или запись в отдельный файл для контроля.

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

  • Удаление товаров навсегда (wp_delete_post($id, true)) нельзя отменить. Делайте резервные копии базы перед запуском.
  • Для снижения нагрузки разделяйте удаление на пакеты и выполняйте с задержками через WP-Cron.
  • Проверяйте права пользователя, если планируете запускать удаление через интерфейс.
  • Если магазин большой, рассмотрите использование WP-CLI для удаления — это эффективнее и надёжнее.
  • Для дополнительной очистки можно вместе с товарами удалять связанные медиа и метаданные.

Сравнение способов автоматического удаления неактивных товаров

МетодОписаниеПлюсыМинусы
Ручное удаление в админкеУдаление товаров вручную через фильтрПростота, контрольТрудозатратно, не автоматично
Код с WP-CronАвтоматическое удаление старых товаров по расписаниюАвтоматизация, гибкость настройкиЗависит от работы WP-Cron, требует тестирования
Плагины очисткиГотовые решения для управления товарамиПростота установки, дополнительные функцииМогут влиять на производительность, лицензии
Как использовать WP-CLI для управления плагинами в WordPress
17.04.2026
Как добавить автоматическое обновление плагинов в WordPress без помощи коммерческих пакетов
20.12.2025
Как использовать REST API для автоматизации управления заказами в WooCommerce
27.04.2026
Как удалить или изменить атрибуты товаров WooCommerce через код
01.05.2026
Как создать автоматический импорт новостей из внешнего API в WordPress
16.03.2026