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

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

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

Проверьте наличие таких заказов в админке WooCommerce: перейдите в WooCommerce > Заказы и выберите статус Ожидает оплаты или В ожидании. Если их много и они не удаляются автоматически, значит, нужно внедрять автоматизацию очистки.

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

Основные этапы решения

  1. Определить критерии для удаления (например, заказы со статусом pending, старше 24 часов).
  2. Создать функцию для выборки и удаления таких заказов.
  3. Запустить удаление по расписанию с помощью WP-Cron.

Пример рабочего кода для functions.php темы или собственного плагина

function wpsource_delete_old_pending_orders() {
    $args = array(
        'status' => 'pending',
        'date_created' => '<' . ( time() - DAY_IN_SECONDS ), // заказы старше 24 часов
        'limit' => -1,
        'return' => 'ids',
    );

    $orders = wc_get_orders( $args );

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

// Регистрируем событие в WP-Cron по расписанию
if ( ! wp_next_scheduled( 'wpsource_daily_delete_pending_orders' ) ) {
    wp_schedule_event( time(), 'daily', 'wpsource_daily_delete_pending_orders' );
}

add_action( 'wpsource_daily_delete_pending_orders', 'wpsource_delete_old_pending_orders' );

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

Чтобы проверить, что решение работает:

  • Создайте тестовый заказ со статусом pending.
  • Измените дату создания заказа в базе данных (например, через phpMyAdmin) на дату более 24 часов назад.
  • Принудительно запустите событие WP-Cron, например, через плагин WP Crontrol или вызовом do_action('wpsource_daily_delete_pending_orders') в коде.
  • Проверьте, удалился ли заказ из списка в WooCommerce.

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

  • Заказы не удаляются: Проверьте, активна ли задача WP-Cron (wp_schedule_event), и что хук wpsource_daily_delete_pending_orders привязан к функции.
  • Удаление не полное (заказы в корзине): Функция wp_trash_post перемещает заказ в корзину, а не удаляет. Для полного удаления используйте wp_delete_post( $order_id, true ), но будьте осторожны с восстановлением данных.
  • Неправильная дата фильтрации: Убедитесь, что параметр date_created соответствует формату и времени UTC.
  • Сбой при массовом удалении: Ограничьте количество удаляемых заказов за один запуск или запустите удаление по пакетам, чтобы избежать таймаутов.

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

  • Перед удалением всегда лучше сначала перемещать заказы в корзину — это позволит восстановить ошибочно удалённые данные.
  • Добавьте логирование удалений в отдельный файл или системный журнал, чтобы отслеживать процесс и иметь возможность аудита.
  • Если магазин большой, лучше запускать удаление по частям (например, по 50 заказов за раз), чтобы не перегружать сервер.
  • Проверяйте, не конфликтует ли этот скрипт с другими плагинами, которые работают с заказами.

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

ВариантПреимуществаНедостатки
Удаление через WP-Cron и кастомный кодПолный контроль, без плагинов, легко настраивать сроки и логикуТребует навыков разработки, возможны ошибки при неправильном коде
Плагины для очистки заказов (например, WooCommerce Order Cleanup)Простота установки и настройки, готовые интерфейсыНагрузка на сайт, возможные конфликты, ограниченная кастомизация
Ручное удаление через админкуПростота, не требует кодаТрудоёмко, неэффективно для большого количества заказов
Как запустить WordPress в контейнере Docker с настройкой Nginx
08.04.2026
Как удалить автоматические ревизии в WordPress для ускорения сайта
19.03.2026
Как отложить загрузку скриптов в WordPress без плагинов
07.01.2026
WooCommerce: как автоматически очищать корзину и сессии после оформления заказа
03.05.2026
Как установить и настроить Redis кеш в WordPress для ускорения сайта
07.02.2026