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

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

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

Чтобы автоматизировать очистку, полезно настроить удаление таких заказов через определённое время.

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

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

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

Если число очень большое (сотни или тысячи), это повод для очистки.

Также проверьте, не используются ли эти заказы в отчетах или интеграциях, чтобы избежать потери важных данных.

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

1. Создаём функцию для удаления заказов старше N дней

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

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

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

    $query = new WP_Query($args);

    if ($query->have_posts()) {
        foreach ($query->posts as $order_id) {
            wp_delete_post($order_id, true); // true - принудительное удаление
        }
    }
}

2. Запускаем функцию через WP-Cron

Добавьте регистрацию события и планировщик:

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

// Хук на событие
add_action('er_delete_unpaid_orders_daily', 'er_delete_old_unpaid_orders');

Этот код будет запускать удаление старых неоплаченных заказов ежедневно.

Проверка результата

  • Выполните SQL-запрос из блока диагностики до и после внедрения, чтобы увидеть уменьшение числа неоплаченных заказов.
  • Можно вручную запустить функцию er_delete_old_unpaid_orders() через WP-CLI или временно добавить вызов в functions.php для теста.
  • Проверьте в админке WooCommerce — старые неоплаченные заказы должны исчезнуть.

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

1. Заказы не удаляются

  • Проверьте, активирован ли WP-Cron (например, перейдите на страницу wp-cron.php и смотрите логи).
  • Убедитесь, что статус заказа написан правильно — WooCommerce использует префикс wc- (например, wc-pending).
  • Проверьте права пользователя, под которым запускается код — функция wp_delete_post требует соответствующих прав.

2. Удаляются нужные заказы

  • Настройте правильное значение переменной $days, чтобы не удалять свежие заказы.
  • Если нужны исключения, добавьте дополнительные условия в запрос.

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

  • Всегда делайте резервные копии базы перед автоматическим удалением данных.
  • Для больших баз данных рекомендуем разбивать удаление на небольшие партии (например, по 100 заказов за раз), чтобы избежать таймаутов.
  • Если WP-Cron не надежен на вашем хостинге, настройте системный cron-задание для вызова wp-cron.php.

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

МетодПлюсыМинусы
Ручное удаление через админкуПросто, не требует кодаТрудозатратно, неэффективно при большом количестве
Плагин типа "Cleanup"Удобно, обычно с настройкамиДополнительная нагрузка, может конфликтовать с другими плагинами
Кастомный код с WP-CronГибко, автоматизация, минимальная нагрузкаТребует навыков кодирования, настройка WP-Cron
Как автоматизировать просмотр отзывов в WordPress с помощью WPRemark
10.03.2026
Как удалить записи по условию в WordPress программно
02.03.2026
Как исправить ошибку WooCommerce "Invalid security nonce" при оформлении заказа
07.05.2026
Как удалить ревизии и оптимизировать базу данных WooCommerce
23.06.2026
Как запретить доступ к файлам WordPress по IP-адресу
06.03.2026