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

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

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

Основные признаки необходимости удаления заказов:

  • База данных быстро растет без видимых причин.
  • В отчетах и списках много устаревших заказов, которые не влияют на аналитику.
  • Неоплаченные заказы висят месяцами, занимая ресурсы.

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

Основные критерии для удаления заказов

Чаще всего удаляют неоплаченные заказы со статусом pending, failed или cancelled, которые старше заданного количества дней, например 30.

Пошаговое решение с примером кода

Реализуем функцию, которая будет запускаться через WP-Cron и удалять подходящие заказы.

function wpkey_delete_old_wc_orders() {
    $days_to_keep = 30; // Количество дней для хранения заказов
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_to_keep . ' days'));

    $args = array(
        'limit' => -1,
        'status' => array('pending', 'failed', 'cancelled'),
        'date_created' => '<' . $date_threshold,
        'return' => 'ids',
    );

    $orders = wc_get_orders($args);

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

// Регистрируем событие cron, если ещё не зарегистрировано
if (!wp_next_scheduled('wpkey_daily_delete_old_orders')) {
    wp_schedule_event(time(), 'daily', 'wpkey_daily_delete_old_orders');
}

// Хук для запуска функции
add_action('wpkey_daily_delete_old_orders', 'wpkey_delete_old_wc_orders');

Этот код:

  • Ищет заказы с нужными статусами старше 30 дней.
  • Удаляет их полностью из базы (вместо смены статуса).
  • Запускается один раз в сутки через WP-Cron.

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

  • Зайдите в WooCommerce → Заказы и отфильтруйте заказы по статусам pending, failed, cancelled.
  • Проверьте даты заказов – старые должны отсутствовать или быть удалены.
  • Чтобы проверить работу cron, можно использовать плагин WP Crontrol, запустить задачу вручную и посмотреть логи.
  • Проверьте таблицу wp_posts в базе данных, чтобы убедиться, что заказы удалены (тип записи shop_order).

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

  • Заказы не удаляются: Проверьте, что WP-Cron работает на сайте и событие wpkey_daily_delete_old_orders запланировано.
  • Удаляются не те заказы: Проверьте правильность параметров в wc_get_orders(), особенно фильтр по дате и статусу.
  • Удаление вызывает ошибки или потерю данных: Убедитесь, что используете wp_delete_post($order_id, true) для полного удаления, а не только в корзину.
  • Высокая нагрузка при удалении большого количества заказов: Если заказов много, разбейте удаление на порции с помощью пагинации.

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

  • Всегда делайте резервную копию базы данных перед внедрением автоматического удаления.
  • Для больших магазинов используйте удаление по частям, чтобы не перегружать сервер.
  • Ограничьте удаление только статусами, которые точно не нужны для отчетности или восстановления.
  • Рассмотрите использование плагина Clearfy Pro для оптимизации WooCommerce и автоматизации рутинных задач, включая чистку базы https://wpshop.ru/plugins/clearfy?utm_source=wpkey.ru&utm_medium=article&utm_campaign=woocommerce-avtomaticheskoe-udaleniye-staryh-zakazov-po-taymautu

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

МетодПлюсыМинусы
WP-Cron с пользовательским кодомПолный контроль, бесплатное решение, легко кастомизируетсяЗависит от работы WP-Cron, требует навыков разработки
Плагин для очистки заказов (например, Clearfy Pro)Простота настройки, дополнительные функции оптимизацииПлатный, может быть избыточным при простой задаче
Удаление вручную через базу данных (SQL)Быстрое удаление, напрямуюРиск потерять данные, нет автоматизации, требует опыт работы с БД
Как создать автоматический бэкап WordPress без плагинов
28.12.2025
Как добавить AJAX в WordPress без плагинов
25.11.2025
WooCommerce: автоматическое изменение статуса заказа при отмене оплаты
31.05.2026
Как создать свой плагин WordPress с нуля: практическое руководство
09.11.2025
WooCommerce: автоматическое отключение неиспользуемых способов оплаты
21.07.2026

Ресурс в разработке, скоро здесь будет сайт по вордпресс