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

Почему нужно удалять заказы WooCommerce по статусу

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

Диагностика: как понять, что стоит удалить заказы

Перед автоматизацией важно определить, какие именно заказы нужно удалять:

  • Отмена или провал оплаты: заказы со статусами cancelled, failed
  • В ожидании оплаты слишком долго: статус pending или on-hold более 30 дней

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

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

Мы настроим WP-Cron задачу, которая будет запускаться раз в сутки и удалять все заказы старше 30 дней по указанным статусам.

1. Добавляем функцию удаления заказов

function wpbe_delete_old_wc_orders() {
    // Статусы заказов для удаления
    $statuses = array('cancelled', 'failed', 'pending');
    
    // Дата 30 дней назад
    $date = date('Y-m-d H:i:s', strtotime('-30 days'));

    foreach ($statuses as $status) {
        $args = array(
            'limit' => -1,
            'status' => $status,
            'date_created' => '<'.$date,
            'return' => 'ids',
        );

        $orders = wc_get_orders($args);
        
        foreach ($orders as $order_id) {
            $order = wc_get_order($order_id);
            // Удаляем заказ
            wp_delete_post($order_id, true);
        }
    }
}

2. Регистрируем WP-Cron событие

if (!wp_next_scheduled('wpbe_daily_delete_old_orders')) {
    wp_schedule_event(time(), 'daily', 'wpbe_daily_delete_old_orders');
}
add_action('wpbe_daily_delete_old_orders', 'wpbe_delete_old_wc_orders');

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

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

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

  • Проверьте наличие старых заказов с выбранными статусами в админке WooCommerce > Заказы.
  • Запустите функцию вручную, вызвав wpbe_delete_old_wc_orders() через WP-CLI или подключив её к кнопке в админке.
  • После запуска проверьте, что заказы удалены из базы (проверьте таблицу wp_posts с типом shop_order).
  • Убедитесь, что в cron задачах (через плагин WP Crontrol) есть событие wpbe_daily_delete_old_orders.

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

  • Заказы не удаляются: проверьте, что функция вызывается и что у пользователя/процесса есть права на удаление записей.
  • Удаляются не те заказы: проверьте корректность статусов в массиве и дату фильтрации.
  • Нагрузка на сервер при массовом удалении: если заказов много, разбейте удаление на части с пагинацией и используйте транзакции.
  • Функция не запускается по cron: проверьте, активен ли wp-cron, нет ли конфликтов с плагинами безопасности.

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

  • Перед удалением сделайте резервную копию базы данных.
  • Внедряйте удаление только для заказов старше 30 дней — так минимизируете риск удаления нужных данных.
  • Для больших магазинов оптимизируйте выборку заказов с помощью прямых SQL-запросов с лимитом и индексами.
  • Используйте сторонние инструменты, такие как WPShop Clearfy Pro, чтобы управлять очисткой базы и кроном более гибко.

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

МетодПлюсыМинусы
Код через WP-Cron (как в статье)Гибкая настройка, без плагинов, можно кастомизироватьТребует навыков, возможна нагрузка при больших объемах
Плагин для очистки базы (например, WP Sweep)Простота использования, готовые функции очисткиМеньше контроля, риск удаления ненужных данных
Ручное удаление через админку WooCommerceБезопасно, интуитивноНе подходит для больших объемов, требует времени
Настройка и создание кастомных всплывающих окон в WordPress
27.01.2026
Как автоматизировать управление перенаправлениями в WordPress
11.02.2026
Как удалить или изменить slug записи WordPress без потери SEO
05.01.2026
Как удалить заблокированных пользователей в WordPress через код
24.02.2026
Как автоматически создавать и управлять копиями постов в WordPress
07.02.2026