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

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

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

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

Шаг 1: Подключение к Cron WordPress

WordPress использует WP-Cron для планирования задач. Для автоматического удаления заказов зарегистрируем собственное событие.

Шаг 2: Создание функции удаления неоплаченных заказов

Мы будем удалять заказы со статусом pending и возрастом более 1 дня (24 часа). Код добавляется в файл functions.php вашей активной темы или в плагин для кастомных функций.

function wpb_delete_unpaid_orders() {
    $args = array(
        'limit'        => -1,
        'status'       => 'pending',
        'date_created' => '<' . ( time() - DAY_IN_SECONDS ),
        'return'       => 'ids',
    );

    $orders = wc_get_orders( $args );

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

add_action( 'wpb_cron_delete_unpaid_orders', 'wpb_delete_unpaid_orders' );

Шаг 3: Регистрация Cron-события

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

Этот код проверяет, запланировано ли событие, и если нет – создаёт ежедневное задание.

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

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

  • Убедитесь, что в базе есть заказы со статусом pending, созданные более 24 часов назад.
  • Запустите Cron вручную, используя плагин WP Crontrol или вызов функции через консоль WP-CLI.
  • Проверьте, что такие заказы удалились из базы (через админку или напрямую в базе данных в таблице wp_posts, где post_type = 'shop_order').

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

  • Заказы не удаляются: Проверьте, активен ли WP-Cron в WordPress и не отключен ли в wp-config.php (константа DISABLE_WP_CRON должна быть false или отсутствовать).
  • Удаляются не те заказы: Убедитесь, что статус заказа правильно указывается в запросе 'status' => 'pending'. Для других статусов нужно изменить параметр.
  • Ошибка с датой создания: Параметр 'date_created' => '<' . ( time() - DAY_IN_SECONDS ) должен быть строкой в формате YYYY-MM-DD или объектом WC_DateTime. В нашем примере можно заменить на 'date_created' => array( 'before' => ( new WC_DateTime( '-1 day' ) )->format( 'Y-m-d H:i:s' ) ) для корректности.

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

  • Удаляйте заказы только с проверкой возраста, чтобы избежать случайного удаления новых заказов.
  • Используйте wp_delete_post( $order_id, true ) для полного удаления, включая метаданные и вложения.
  • Для больших магазинов с тысячами заказов настройте более частое выполнение и лимит удаления, чтобы не нагружать сервер.
  • При необходимости используйте сторонние плагины для управления Cron, например WP Crontrol, для мониторинга и отладки задач.

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

МетодОписаниеПлюсыМинусы
WP-Cron + кастомный код Регистрация задачи и функция удаления в functions.php Полный контроль, бесплатно, гибко Зависит от посещаемости сайта, требует навыков
Плагин WP Crontrol + кастомный код Управление Cron из админки с кастомным кодом Удобство управления Cron, отладка Плагин увеличивает нагрузку, дополнительная настройка
Сторонние плагины автоматической очистки Готовые решения для удаления заказов Простота установки, готовые настройки Могут быть платными, ограниченная гибкость
Оптимизация загрузки шрифтов в WordPress: практические решения и примеры кода
05.12.2025
WooCommerce: как автоматически удалять отменённые заказы и товары с нулевым остатком
07.06.2026
WooCommerce: как автоматически изменять статус заказа по срокам
22.05.2026
WooCommerce: автоматическое удаление отзывов с низким рейтингом
14.06.2026
Как использовать фильтр YITH WooCommerce Wishlist для добавления собственных критериев
16.01.2026