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

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

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

Чаще всего удаляют товары по двум параметрам:

  • Дата создания или последнего обновления товара — удалять товары старше определенного периода;
  • Статус товара — удалять черновики, неактивные или товары с определенным статусом.

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

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

Для автоматизации используем встроенную систему планировщика заданий WordPress — WP-Cron. Добавим событие, которое будет запускаться ежедневно.

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

2. Функция удаления товаров по параметрам

Определим функцию, которая будет искать и удалять товары старше 90 дней с определенными статусами (например, 'draft' и 'private').

function wpr_delete_old_products() {
    $args = [
        'post_type' => 'product',
        'post_status' => ['draft', 'private'],
        'date_query' => [
            [
                'column' => 'post_date',
                'before' => '90 days ago',
            ],
        ],
        'fields' => 'ids',
        'posts_per_page' => -1,
    ];

    $old_products = get_posts($args);

    if (!empty($old_products)) {
        foreach ($old_products as $product_id) {
            wp_delete_post($product_id, true); // true — полный удаление без перемещения в корзину
        }
    }
}
add_action('wpr_delete_old_products_cron', 'wpr_delete_old_products');

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

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

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

Как проверить, что автоматическое удаление работает

  1. Добавьте несколько тестовых товаров с нужным статусом (draft или private) и датой создания более 90 дней назад (можно изменить дату вручную через базу или плагин для управления датами постов).
  2. Запустите WP-Cron вручную с помощью плагина WP Crontrol или вызовите функцию wpr_delete_old_products() напрямую через консоль WP-CLI или временный вызов в теме.
  3. Проверьте, что товары удалились из админки WooCommerce и отсутствуют в базе (таблица wp_posts).
  4. Убедитесь, что в логе ошибок нет предупреждений или ошибок.

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

  • Товары не удаляются: возможно, WP-Cron не запускается из-за низкого трафика. Решение — настроить системный cron на сервере или запускать вручную через WP-CLI.
  • Удаляются не те товары: проверьте параметры post_status и date_query, убедитесь, что даты и статусы соответствуют.
  • Проблемы с правами доступа: убедитесь, что пользователь, под которым выполняется скрипт, имеет права на удаление записей.
  • Удаление замедляет сайт: если товаров много, разбейте удаление на партии по 20-50 штук за один запуск.

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

  • Используйте wp_delete_post($post_id, true) с параметром true для полного удаления без перемещения в корзину, чтобы не засорять базу.
  • Регулярно создавайте резервные копии перед автоматическим удалением, чтобы избежать потери данных.
  • Для больших магазинов используйте отложенное удаление по частям, чтобы избежать таймаутов.
  • Проверяйте логи ошибок и активируйте WP_DEBUG на тестовом сервере перед внедрением.

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

Метод Плюсы Минусы Применимость
WP-Cron + кастомный код (как в статье) Гибко, бесплатно, без плагинов, можно подстроить под любые условия Зависит от WP-Cron, требует навыков разработки Подходит для разработчиков и опытных администраторов
Плагины очистки WooCommerce (например, WP Reset) Удобный интерфейс, быстрый запуск, готовые функции Может удалять больше, чем нужно, есть риск потери важных данных Для пользователей без навыков программирования, но с рисками
Ручное удаление через админку Простота, контроль Трудозатратно, не подходит для больших объемов Малые магазины с небольшим каталогом
Как удалить или отключить WooCommerce без потери данных
24.04.2026
Как решить проблему замедленного запроса к базе данных в WordPress
05.12.2025
Как удалить или отключить плагин WordPress без доступа к админке
13.01.2026
Как автоматизировать удалённые задачи в WordPress без плагинов
09.02.2026
WooCommerce: автоматическое удаление оконченных заказов по дате
02.07.2026