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

Проблема: неоплаченные заказы захламляют базу данных WooCommerce

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

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

Чтобы убедиться, что именно неоплаченные заказы создают нагрузку, выполните следующие шаги:

  • Зайдите в раздел WooCommerce > Заказы и отфильтруйте заказы по статусу pending или on-hold.
  • Проверьте количество таких заказов и дату их создания.
  • Если количество неоплаченных заказов большое и дата создания заказы более нескольких дней назад, это подтверждает необходимость очистки.

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

Реализуем автоматическую очистку неоплаченных заказов с помощью планировщика задач WP-Cron и стандартных функций WooCommerce.

1. Добавляем функцию очистки заказов

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

function wpkey_delete_unpaid_orders() {
    $days_to_keep = 3; // Количество дней до удаления
    $date = date('Y-m-d H:i:s', strtotime('-' . $days_to_keep . ' days'));

    $args = array(
        'limit' => -1,
        'status' => array('pending', 'on-hold'),
        'date_created' => '<' . $date,
        'return' => 'ids',
    );

    $orders = wc_get_orders($args);

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

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

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

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

add_action( 'wpkey_cron_delete_unpaid_orders', 'wpkey_delete_unpaid_orders' );

Этот код настроит ежедневный запуск функции очистки.

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

  • Создайте тестовый заказ со статусом pending и установите дату создания больше трёх дней назад (можно через базу или фильтр).
  • Запустите вручную функцию wpkey_delete_unpaid_orders() через WP-CLI wp eval 'wpkey_delete_unpaid_orders();' или временно вызовите её из админки.
  • Проверьте раздел заказов — тестовый заказ должен исчезнуть.
  • Через сутки система выполнит удаление автоматически.

Частые ошибки и способы их устранения

  • Заказы не удаляются: проверьте, что хук wpkey_cron_delete_unpaid_orders зарегистрирован и cron-события работают (wp-cron может быть отключен на сервере). Для теста можно вызвать функцию вручную.
  • Удаляются нужные заказы: убедитесь, что в запросе фильтруются только статусы pending и on-hold, а также учитывается дата создания.
  • Производительность падает: если заказов слишком много, уменьшите лимит или разбейте удаление на куски с помощью пагинации.

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

  • Всегда делайте резервную копию базы перед внедрением автоматического удаления.
  • Для больших магазинов используйте WP-CLI для запуска очистки вне Cron, чтобы снизить нагрузку.
  • Проверяйте права пользователя, если добавляете интерактивные вызовы функции.
  • Логи активности помогают отследить выполнение очистки и выявить ошибки.

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

МетодПлюсыМинусы
WP-Cron + wp_delete_postПростота, не требует плагиновЗависит от WP-Cron, возможны задержки
Плагины автоматизацииГотовые решения, расширенные настройкиДополнительная нагрузка, зависимость от плагина
WP-CLI скриптыВысокая производительность, гибкостьТребуется доступ к серверу
WooCommerce: автоматическое изменение статуса заказа при отмене оплаты
31.05.2026
WooCommerce: способы оплаты не отображаются при использовании Strict Checkout — решение проблемы
11.05.2026
Как автоматически отключать неиспользуемые плагины в WordPress
29.03.2026
Как установить и настроить Redis для кэширования в WordPress
14.11.2025
WooCommerce: автоматическое удаление неоплаченных заказов по таймауту с помощью кодовых хуков
15.07.2026

Ресурс в разработке, скоро здесь будет сайт по вордпресс