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

Проблема: накопление неоплаченных заказов в WooCommerce

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

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

Чтобы проверить, есть ли неоплаченные заказы и сколько их, используйте SQL-запрос или WP-CLI:

SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' AND post_status IN ('wc-pending', 'wc-on-hold');

Здесь wc-pending и wc-on-hold — статусы неоплаченных заказов. Если количество большое (от сотен и выше), есть смысл автоматизировать их удаление.

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

Шаг 1. Добавляем функцию для удаления заказов старше N часов

В файл functions.php вашей дочерней темы или в кастомный плагин добавьте следующий код:

function wpdream_delete_unpaid_orders() {
    $hours = 24; // время в часах, по истечении которого удаляем заказ
    $date = date('Y-m-d H:i:s', strtotime("-{$hours} hours"));

    $args = [
        'posts_per_page' => -1,
        'post_type'      => 'shop_order',
        'post_status'    => [ 'wc-pending', 'wc-on-hold' ],
        'date_query'     => [
            [
                'column' => 'post_date',
                'before' => $date,
            ],
        ],
        'fields'        => 'ids',
    ];

    $orders = get_posts($args);

    if (!empty($orders)) {
        foreach ($orders as $order_id) {
            wp_delete_post($order_id, true); // true - без возможности восстановления
        }
    }
}

Шаг 2. Настраиваем крон-задачу для регулярного вызова

Добавьте следующий код для регистрации собственного Cron-события:

if (!wp_next_scheduled('wpdream_cron_delete_unpaid_orders')) {
    wp_schedule_event(time(), 'hourly', 'wpdream_cron_delete_unpaid_orders');
}

add_action('wpdream_cron_delete_unpaid_orders', 'wpdream_delete_unpaid_orders');

Этот код запустит функцию wpdream_delete_unpaid_orders каждый час, удаляя старые неоплаченные заказы.

Шаг 3. Очистка Cron при деактивации

Чтобы избежать мусора в планировщике, добавьте в плагин или functions.php такую функцию:

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

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

  • Подождите час после внедрения или вручную запустите Cron через WP-CLI: wp cron event run wpdream_cron_delete_unpaid_orders
  • Проверьте базу заказов, чтобы убедиться, что старые неоплаченные заказы удалены
  • В административной панели WooCommerce зайдите в «Заказы» и отфильтруйте по статусам Ожидает оплаты или В ожидании — количество должно уменьшиться

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

  • Заказы не удаляются: проверьте, что Cron действительно запускается (логируйте вызов функции или используйте плагин WP Crontrol)
  • Удаляются не те заказы: убедитесь, что в post_status указаны нужные статусы, и правильно рассчитывается дата
  • Удаление тормозит сайт: если заказов очень много, удаляйте партиями, разбивая их на части, например по 50 штук
  • Заказы важно не удалять навсегда: замените wp_delete_post($order_id, true) на wp_trash_post($order_id), чтобы сначала переместить в корзину

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

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

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

МетодПлюсыМинусыКогда использовать
Удаление через WP Cron и кодПолный контроль, без сторонних плагинов, гибкостьТребует навыков разработки, настройки CronДля опытных пользователей, кастомных проектов
Плагины автоматической очистки заказовПростота использования, готовые настройкиМожет быть слишком общий функционал, нагрузкаДля новичков и типовых сайтов
Ручное удаление через админкуПросто, не требует кодаТрудозатратно при большом объёме заказовМалые объёмы заказов
WooCommerce: как удалить варианты товаров без пустых значений
20.07.2026
Как использовать WPCommunity для создания собственного форума на WordPress
03.01.2026
Как удалить или изменить поля формы регистрации WooCommerce
11.07.2026
Как добавить иконки приложений в WordPress: руководство с примерами
20.05.2025
Как создать динамический список постов с фильтрами в WordPress
29.01.2026