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

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

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

Автоматизация удаления таких заказов через планировщик WP-Cron поможет поддерживать базу данных в чистоте без дополнительных плагинов и нагрузки на сервер.

Как настроить автоматическое удаление заказов по статусам через WP-Cron

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

Добавьте в файл functions.php вашей темы или в кастомный плагин следующий код. В данном примере мы удаляем заказы со статусами cancelled и failed, которые старше 7 дней.

function wc_delete_old_orders() {
    $days = 7; // количество дней
    $date_query = array(
        'column' => 'post_date',
        'before' => date('Y-m-d H:i:s', strtotime("-{$days} days")),
    );

    $args = array(
        'post_type'      => 'shop_order',
        'post_status'    => array('wc-cancelled', 'wc-failed'),
        'date_query'     => array($date_query),
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );

    $orders = get_posts($args);

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

    foreach ($orders as $order_id) {
        wp_delete_post($order_id, true); // true - безвозвратно
    }
}

2. Регистрируем задачу WP-Cron

Добавим событие в планировщик, которое будет запускать функцию раз в сутки.

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

add_action('wc_delete_old_orders_cron', 'wc_delete_old_orders');

3. Проверяем, что событие запланировано

Для диагностики установите плагин WP Crontrol. В разделе «Cron Events» вы должны увидеть событие wc_delete_old_orders_cron с расписанием «daily».

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

  • Создайте тестовые заказы со статусами cancelled или failed и датой создания старше 7 дней (можно вручную изменить дату в базе или через SQL-запрос).
  • Вручную запустите задачу через WP Crontrol — выберите wc_delete_old_orders_cron и нажмите «Run Now».
  • Проверьте, что заказы удалились из админки WooCommerce и из таблиц базы данных wp_posts.

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

  • Задача не запускается автоматически: Проверьте, что на сайте есть посещения — WP-Cron запускается при посещении сайта. Для надёжности можно настроить системный cron на сервере, вызывающий wp-cron.php.
  • Заказы не удаляются: Убедитесь, что в запросе правильно указаны статусы с префиксом wc-. Также проверьте права пользователя, под которым выполняется код.
  • Удаляются не те заказы: Проверьте параметры date_query и статусы. Логируйте ID удаляемых заказов для отладки.

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

  • Всегда делайте резервные копии базы данных перед автоматическим удалением данных.
  • Не удаляйте заказы сразу после создания — используйте отложенный период (например, 7 дней), чтобы избежать удаления актуальных заказов.
  • Если база большая, удаляйте заказы партиями, чтобы избежать таймаута. Например, ограничьте posts_per_page до 100 и запускайте задачу чаще.
  • Для более сложных условий фильтрации используйте метаполя заказов и дополнительные параметры WP_Query.

Сравнение подходов к автоматическому удалению заказов

МетодПлюсыМинусыПример использования
WP-Cron + пользовательский кодГибкость, отсутствие лишних плагинов, полный контрольЗависимость от посещений сайта, требует навыков PHPКод из статьи выше
Плагины очистки WooCommerceПростота настройки, готовый функционал, UIЗависимость от стороннего кода, возможная нагрузкаПлагины вроде WP Bulk Delete
Серверный cron с WP-CLIНадёжность, не зависит от посещений, быстрое выполнениеТребует доступа к серверу и командной строкеwp cron event run wc_delete_old_orders_cron
Как сделать защиту от спама в комментариях WordPress
05.11.2025
Как добавить автоматическое сохранение записей через REST API в WordPress
13.12.2025
Как создать визуальные таблицы в WordPress без кодирования
18.01.2026
Как настроить отложенный запуск cron задач в WordPress без плагинов
07.02.2026
Как использовать REST API в WordPress для создания кастомных решений
16.11.2025