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

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

Неоплаченные заказы в WooCommerce могут скапливаться, занимая место в базе данных и замедляя работу панели администратора. Особенно актуально для магазинов с большим трафиком и частыми брошенными корзинами. Обычно стандартный таймаут отмены заказа — 60 минут, но для некоторых бизнесов это слишком мало. Задача — удалить заказы, которые не были оплачены в течение 72 часов (3 суток) автоматически, без использования плагинов.

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

1. Создаем функцию удаления старых неоплаченных заказов

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

function delete_old_unpaid_orders() {
    if ( ! class_exists( 'WooCommerce' ) ) {
        return;
    }

    $args = array(
        'limit'        => -1,
        'status'       => 'pending', // неоплаченные заказы
        'date_created' => '<' . ( time() - 72 * 60 * 60 ), // старше 72 часов
        'return'       => 'ids',
    );

    $orders = wc_get_orders( $args );

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

2. Регистрируем WP-Cron событие для периодического запуска

Добавьте хук для запуска функции раз в сутки:

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

add_action( 'daily_delete_old_unpaid_orders', 'delete_old_unpaid_orders' );

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

1. Создайте тестовый заказ со статусом pending и установите дату создания более 72 часов назад (можно вручную через базу данных или с помощью функции).
2. Запустите cron задачу вручную, вызвав функцию delete_old_unpaid_orders() через WP-CLI или временно добавив вызов в код.
3. Проверьте, что заказ переместился в корзину или удалился полностью в админке WooCommerce.
4. Убедитесь, что cron задача срабатывает ежедневно — можно проверить список запланированных задач через плагин WP Crontrol.

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

  • Заказы не удаляются: убедитесь, что WooCommerce активен, и функция wc_get_orders доступна.
  • Неправильное время удаления: проверьте, что время в сервере и WordPress совпадает, и что параметр date_created корректно считается (в коде используется timestamp).
  • Удаление не происходит автоматически: проверьте, что WP-Cron работает (иногда требуется настроить системный cron для надежности).
  • Удаление не то, что ожидалось: будьте осторожны с функцией wp_delete_post — она удаляет заказ без возможности восстановления. Лучше использовать wp_trash_post.

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

  • Обязательно тестируйте код на staging-сервере, чтобы избежать потери важных заказов.
  • Для производительности лучше ограничивать количество одновременно удаляемых заказов (например, 'limit' => 50).
  • Используйте wp_trash_post вместо полного удаления, чтобы можно было восстановить ошибочно удаленные данные.
  • Если магазин большой, настройте системный cron для запуска WP-Cron задач, чтобы избежать сбоев при низком трафике.

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

МетодПлагинКод (WP-Cron)Компромисс
Простота Очень высокая (готовое решение) Средняя (требует кода и тестирования) Плагины могут добавить лишний функционал
Контроль Ограниченный настройками плагина Полный, можно кастомизировать Код требует поддержки разработчика
Производительность Зависит от плагина Оптимизирован под задачу Риск ошибок при неправильной реализации
Безопасность Зависит от качества плагина Можно встроить проверки и логи Необходимо тщательно тестировать
Как автоматизировать удаление старых медиа файлов в WordPress
31.01.2026
WooCommerce: автоматическое удаление отказанных и возвращённых заказов
19.06.2026
WooCommerce: установка и настройка отображения оплаты при использовании PayPal
25.04.2026
Как использовать хуки в WordPress для автоматизации задач
07.12.2025
Как создать автоматические уведомления в WordPress с помощью хуков и плагинов
09.01.2026