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

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

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

  • загрязнению базы данных ненужными записями;
  • затруднению аналитики и учёта продаж;
  • увеличению нагрузки на бэкенд и замедлению админки;
  • ошибкам при интеграции с платёжными системами и CRM.

Стандартный WooCommerce не удаляет автоматически такие заказы. Поэтому понадобится кастомное решение.

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

1. Выбор подходящего хука для автоматизации

Для регулярного удаления неоплаченных заказов используем WP-Cron — внутренний планировщик WordPress. Он запустит функцию очистки по расписанию.

2. Код для удаления неоплаченных заказов старше 24 часов

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

function wpsource_delete_unpaid_orders() {
    $args = array(
        'status' => 'pending', // статус неоплаченного заказа
        'date_created' => '<' . ( time() - DAY_IN_SECONDS ), // старше 1 дня
        'limit' => -1, // без лимита
        'return' => 'ids',
    );

    $orders = wc_get_orders( $args );

    if ( empty( $orders ) ) {
        return;
    }

    foreach ( $orders as $order_id ) {
        wp_trash_post( $order_id ); // отправляем заказ в корзину
    }
}

// Создаем событие при активации темы/плагина
function wpsource_schedule_order_cleanup() {
    if ( ! wp_next_scheduled( 'wpsource_daily_order_cleanup' ) ) {
        wp_schedule_event( time(), 'daily', 'wpsource_daily_order_cleanup' );
    }
}
add_action( 'wp', 'wpsource_schedule_order_cleanup' );

// Привязываем функцию к событию
add_action( 'wpsource_daily_order_cleanup', 'wpsource_delete_unpaid_orders' );

3. Объяснение кода

  • Функция wpsource_delete_unpaid_orders находит все заказы со статусом pending, созданные более суток назад.
  • Удаление происходит через wp_trash_post, чтобы не потерять данные сразу, но можно заменить на wp_delete_post для полного удаления.
  • Через wp_schedule_event создаётся ежедневное событие, которое запускает очистку автоматически.

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

Чтобы убедиться, что код работает:

  • Создайте тестовый заказ со статусом «Ожидает оплаты» (pending).
  • Измените дату создания заказа в базе на более старую, чем 24 часа (через phpMyAdmin или WP CLI).
  • Запустите wp-cron вручную: wget -q -O - https://ваш_сайт/wp-cron.php?doing_wp_cron или используйте плагин WP Crontrol.
  • Проверьте в админке WooCommerce — заказ должен быть перемещён в корзину (Trash).

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

  • Код не работает, cron не запускается: Проверьте, включён ли WP-Cron на сайте (опция DISABLE_WP_CRON не должна быть true). Можно настроить системный cron на сервере.
  • Заказы не удаляются, хотя подходят под условие: Проверьте правильность статуса заказа. Для неоплаченных чаще всего pending или failed. Можно расширить фильтр.
  • Удаляются лишние заказы: Перед удалением добавьте логирование или уведомление, чтобы убедиться, что выборка корректна.

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

  • Не используйте полный wp_delete_post без резервного копирования базы, чтобы избежать потери данных.
  • Добавьте проверку прав пользователя, если хотите запускать очистку вручную через админку.
  • Для больших магазинов с тысячами заказов делайте удаление пакетами (например, по 50 заказов за запуск), чтобы не перегружать сервер.
  • Используйте плагин как Clearfy Pro для дополнительной очистки и оптимизации WooCommerce без лишнего кода.

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

МетодПлюсыМинусы
WP-Cron + кастомный кодГибкость, без лишних плагинов, точный контрольНужен опыт, требует тестирования, зависит от WP-Cron
Плагины для очистки WooCommerceПростота использования, готовые настройкиМожет грузить сайт, лишний софт, меньше контроля
Ручное удаление через админкуПростота, отсутствие риска автоматических ошибокЗатратно по времени, не подходит для большого объёма
WooCommerce: как автоматически удалять неоплаченные заказы через код
26.06.2026
Автоматическое удаление старых записей в WordPress по дате и категории
14.12.2025
WooCommerce: как автоматически очищать корзину и сессии после оформления заказа
03.05.2026
WooCommerce: почему не создаётся заказ и как это исправить
10.05.2026
Как избежать проблем с совместимостью WooCommerce после обновления
17.04.2026