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

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

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

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

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

1. Определяем критерии удаления

В этом примере мы будем удалять товары, у которых дата последнего обновления более 180 дней назад и статус «черновик» (draft).

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

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

function wpreset_delete_old_draft_products() {
    global $wpdb;
    // Получаем товары типа 'product' со статусом 'draft' старше 180 дней
    $date_threshold = date('Y-m-d H:i:s', strtotime('-180 days'));

    $args = array(
        'post_type'      => 'product',
        'post_status'    => 'draft',
        'date_query'     => array(
            array(
                'column' => 'post_modified',
                'before' => $date_threshold,
            ),
        ),
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );

    $old_products = get_posts($args);

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

    foreach ($old_products as $product_id) {
        wp_delete_post($product_id, true); // true — удалять без возможности восстановления
    }
}

3. Настраиваем крон-задачу для регулярного запуска

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

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

add_action('wpreset_daily_delete_old_products', 'wpreset_delete_old_draft_products');

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

Временно вызовите функцию напрямую, например, через admin_init (не забудьте потом убрать):

add_action('admin_init', function() {
    if (current_user_can('administrator') && isset($_GET['run_delete_old_products'])) {
        wpreset_delete_old_draft_products();
        wp_die('Удаление выполнено');
    }
});

После этого в админке вызовите https://ваш_сайт/wp-admin/?run_delete_old_products=1 для теста.

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

  • В админке WooCommerce проверьте список товаров: старые товары со статусом «черновик» должны исчезнуть.
  • Рекомендуется сделать бэкап базы перед тестами.
  • Для логирования можно добавить запись в файл или базу, чтобы фиксировать время и количество удаленных товаров:
function wpreset_delete_old_draft_products() {
    ...
    $deleted_count = 0;
    foreach ($old_products as $product_id) {
        wp_delete_post($product_id, true);
        $deleted_count++;
    }
    error_log("[WPReset] Deleted $deleted_count old draft products on " . current_time('mysql'));
}

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

  • Функция не удаляет товары: проверьте, что товары действительно имеют статус draft и дату последнего обновления старше 180 дней.
  • Крон-задача не запускается: убедитесь, что на сайте есть посещения (WP-Cron зависит от них) или настройте системный cron для wp-cron.php.
  • Удаление происходит слишком часто или редко: проверьте интервал daily и время запуска; для большей точности используйте системный cron.
  • Удалённые товары восстанавливаются: возможно, активен плагин резервного копирования с функцией восстановления, проверьте настройки плагинов.

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

  • Всегда делайте резервную копию перед автоматическим удалением данных.
  • Для больших баз товаров используйте пакетную обработку (например, удалять по 50 товаров за раз) чтобы не превышать лимит памяти или время выполнения скрипта.
  • Записывайте логи удаления для аудита и отладки.
  • Рассмотрите использование плагина Clearfy Pro для оптимизации и автоматизации очистки базы WooCommerce с расширенными настройками.

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

МетодПлюсыМинусыКогда применять
Код на functions.php + WP-CronПолный контроль, нет зависимостей от плагинов, гибкостьТребует навыков, может не запускаться без посещенийДля разработчиков, кастомные условия удаления
Плагины автоматизации (например, Clearfy Pro)Удобный интерфейс, дополнительные функции оптимизацииЗависимость от плагина, возможное замедление сайтаДля администраторов без навыков программирования
Как автоматически удалять заблокированных пользователей WordPress
06.06.2026
Как использовать WP-Cron для автоматического удаления старого контента в WordPress
11.05.2026
Как удалить все плагины WordPress одним кликом
26.01.2026
Как автоматизировать удалённые задачи в WordPress без плагинов
09.02.2026
Как удалить заблокированные или замороженные плагины WordPress вручную
01.03.2026