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

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

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

Как понять, что нужна автоматизация удаления заказов?

  • В базе больше 10000 заказов, из них 30-40% имеют статусы, не требующие хранения (например, "отменён").
  • Снижается скорость работы административной панели WooCommerce.
  • Отчёты и статистика искажаются из-за большого количества старых заказов.

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

Реализуем автоматическое удаление заказов со статусом "cancelled" старше 30 дней с помощью пользовательского WP-Cron задания и собственного кода.

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

function wpfind_delete_old_cancelled_orders() {
    $date = date('Y-m-d H:i:s', strtotime('-30 days'));
    $args = [
        'status' => 'cancelled',
        'date_created' => '<' . $date,
        'limit' => -1,
        'return' => 'ids',
    ];
    $orders = wc_get_orders($args);
    
    if (empty($orders)) {
        return;
    }

    foreach ($orders as $order_id) {
        wp_delete_post($order_id, true); // Принудительное удаление
    }
}

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

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

add_action('wpfind_daily_order_deletion', 'wpfind_delete_old_cancelled_orders');

Шаг 3. Очистка по расписанию

Код запускает задачу раз в сутки, которая удаляет все заказы со статусом "cancelled", старше 30 дней. Для других статусов и сроков достаточно изменить параметры в функции.

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

  • В админке WooCommerce перейдите в раздел заказов и примените фильтр по статусу «Отменён». Проверьте, что заказы старше 30 дней исчезли.
  • В базе данных (таблица wp_posts с типом shop_order) проверьте, что записи с указанным статусом и датой созданы не ранее 30 дней назад.
  • Выполните вручную запуск WP-Cron с помощью плагина WP Crontrol или вызова do_action('wpfind_daily_order_deletion'); и убедитесь, что старые заказы удаляются.

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

  • Заказы не удаляются: проверьте, активировано ли WP-Cron на сайте, или используйте системный cron для запуска wp-cron.php.
  • Удаляются не те заказы: уточните параметры в wc_get_orders(), используйте фильтр по статусу и дате корректно.
  • Ошибка прав доступа: убедитесь, что функция wp_delete_post() вызывается с параметром true для полного удаления, а пользователь имеет права администратора.
  • Высокая нагрузка при удалении: при большом количестве заказов разбейте удаление на партии (например, по 50 заказов за раз).

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

  • Резервное копирование базы данных перед внедрением автоматического удаления.
  • Добавьте проверку условия, чтобы не запускать удаление при пиковых нагрузках.
  • Используйте транзакции и логи для отслеживания удалённых заказов.
  • Для сайтов с высокой нагрузкой лучше использовать системный cron вместо WP-Cron.

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

МетодПреимуществаНедостатки
Собственный код (как в статье)Точная настройка, лёгкое изменение логики, нет лишних плагиновТребуется знание PHP, риск ошибок без тестирования
Плагин (например, WP Bulk Delete)Простой интерфейс, много опций, поддержкаДополнительная нагрузка, возможные конфликты с другими плагинами
Как удалить или отключить Emoji в WordPress для ускорения сайта
27.03.2026
Как отключить автозаполнение форм в WordPress
07.01.2026
Как добавить собственные метаданные в WordPress посты
28.11.2025
WooCommerce: решение проблемы с непоявлением вариаций при использовании кэширования
31.05.2026
Как использовать REST API для создания своего плагина WordPress
14.01.2026

Сайт в разработке, скоро здесь будет портал о WordPress.