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

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

В WooCommerce неоплаченные заказы (статус "pending" или "failed") могут накапливаться, занимая место в базе и усложняя работу с заказами. Особенно это актуально для магазинов с большим трафиком и частыми брошенными корзинами. Автоматическое удаление таких заказов помогает поддерживать базу данных в порядке и улучшить производительность.

Как определить, какие заказы подлежат удалению

Для чистки важно точно определить статус и возраст заказа. Обычно удаляют заказы со статусами pending, failed или cancelled, которые не были обновлены за определённое количество дней.

  • Статус заказа — pending (ожидает оплаты), failed (оплата не прошла), иногда cancelled.
  • Возраст заказа — например, старше 7 дней.

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

Реализуем регулярную задачу, которая будет запускаться ежедневно и удалять неоплаченные заказы старше заданного срока.

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

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

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

    $orders = wc_get_orders($args);

    foreach ($orders as $order_id) {
        wp_delete_post($order_id, true); // Удаляем заказ без перемещения в корзину
    }
}

2. Регистрируем событие WP-Cron для ежедневного запуска

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

add_action('wplist_daily_delete_unpaid_orders', 'wplist_delete_old_unpaid_orders');

3. Отключение задачи при деактивации плагина (если код в плагине)

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

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

  • Запустите функцию вручную для теста: wplist_delete_old_unpaid_orders(); через консоль WP-CLI или временно вызвав её из админки.
  • Проверьте список заказов в WooCommerce — старые неоплаченные должны исчезнуть.
  • Проверьте логи сервера или включите WP_DEBUG для отлова ошибок.
  • Убедитесь, что WP-Cron работает: можно использовать плагин WP Crontrol для мониторинга и запуска событий.

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

  • WP-Cron не запускается: если сайт не получает трафик, cron-задачи не выполняются. Решение — настроить системный cron на сервере для вызова wp-cron.php.
  • Удаление не происходит: проверьте правильность статусов и даты в запросе. Можно вывести $orders перед удалением для отладки.
  • Удаляются нужные заказы: убедитесь, что фильтр по статусу и дате корректен, не используйте слишком большие значения.
  • Память или время выполнения превышены: для большого количества заказов разбейте удаление на партии или используйте WP-CLI скрипт.

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

  • Всегда создавайте резервную копию базы перед внедрением автоматического удаления.
  • Ограничивайте количество удаляемых за раз, если заказов очень много.
  • Для критичных магазинов используйте WP-CLI скрипты с возможностью ручного запуска и логированием.
  • При необходимости интегрируйте оповещения по email о выполнении задачи.
  • Для мониторинга и управления cron-задачами используйте плагин WP Crontrol.

Сравнение вариантов реализации удаления неоплаченных заказов

МетодПлюсыМинусы
WP-Cron с хукамиПростая реализация, не требует внешних настроекЗависит от трафика сайта, возможны задержки
Системный cron + WP-CLIНадежно, работает по расписанию без зависимости от трафикаТребует доступа к серверу и знания CLI
Плагины очистки заказовГотовые решения с интерфейсом и настройкамиМогут быть избыточными, нагружают сайт
Как удалить пустые мета-данные в WordPress: эффективные методы и примеры
15.03.2026
Как добавить уникальный файловый заголовок (Content-Disposition) в WordPress
02.04.2026
Как удалить удалённых пользователей в WordPress без отказов и ошибок
08.12.2025
Как избежать фейковых регистраций в WordPress: проверенные методы и примеры
24.12.2025
WooCommerce: как автоматически удалять неоплаченные заказы через заданный промежуток времени
30.05.2026