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

Диагностика проблемы с накоплением неоплаченных заказов

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

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

Для автоматизации процесса можно реализовать собственное задание WP-Cron, которое будет регулярно запускать функцию удаления заказов со статусом pending и датой создания старше определённого срока.

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

function wprus_delete_old_pending_orders() {
    $days = 30; // удалять заказы старше 30 дней
    $date = date('Y-m-d H:i:s', strtotime("-{$days} days"));
    
    $args = array(
        'status'        => 'pending',
        'date_created'  => '<' . $date,
        'limit'         => -1,
        'return'        => 'ids',
    );

    $orders = wc_get_orders($args);

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

2. Регистрация и планирование WP-Cron задачи

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

add_action('wprus_delete_pending_orders_event', 'wprus_delete_old_pending_orders');

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

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

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

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

  • Запустите функцию вручную через do_action('wprus_delete_pending_orders_event'); в консоли WP-CLI или через временный вызов в коде.
  • Проверьте список заказов в WooCommerce — все неоплаченные заказы старше 30 дней должны быть удалены.
  • Просмотрите базу данных таблицу wp_posts с типом shop_order — старые заказы должны отсутствовать.
  • Для контроля можно добавить логирование удаления заказов, например через error_log или файл.

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

  • Заказы не удаляются: Проверьте, что функция wc_get_orders возвращает список ID. Убедитесь, что статус указан правильно — pending для неоплаченных заказов.
  • WP-Cron не срабатывает: Проверьте, запущено ли событие через wp_next_scheduled и не отключен ли WP-Cron в wp-config.php.
  • Удаление происходит не полностью: Вызов wp_delete_post($order_id, true) удаляет заказ полностью, если стоит true. Если стоит false, заказ переходит в корзину.
  • Нагрузка на сервер: При большом количестве заказов удаление всех за один раз может быть слишком тяжёлым. Добавьте лимит по количеству удаляемых заказов за один запуск.

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

  • Добавьте проверку прав пользователя, если функция вызывается в админке.
  • Для снижения нагрузки разбейте удаление на порции, например, по 50 заказов за запуск.
  • Логируйте удалённые ID заказов для аудита и отката при необходимости.
  • Периодически проверяйте и оптимизируйте таблицы базы данных WooCommerce.

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

МетодПлюсыМинусыПример
Ручное удаление через админку Простота, нет кода Долго, не автоматично, риск ошибок WooCommerce → Заказы → фильтр → удаление
WP-Cron с пользовательским кодом Автоматизация, гибкость настройки Нужны навыки, возможна нагрузка Пример кода из статьи
Плагины очистки заказов Простота, готовый функционал Зависимость от сторонних решений, возможны лишние функции Order Cleanup Plugins (например, «WooCommerce Order Status Manager»)
WooCommerce: автоматическое удаление старых неоплаченных заказов
15.05.2026
Как устроить эффективный кэш в WordPress через Redis
15.02.2026
Как автоматизировать удаление старых оставленных комментариев в WordPress
12.04.2026
WooCommerce: автоматическое удаление закрытых заказов по времени
29.05.2026
Как отключить REST API в WordPress без плагинов: практическое руководство
21.01.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше