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

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

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

  • Снизить нагрузку на базу данных;
  • Упростить отчёты и статистику;
  • Избавиться от мусорных данных, которые могут влиять на работу плагинов и интеграций.

Рассмотрим, как настроить автоматическое удаление неоплаченных заказов через заданный промежуток времени, например, 24 часа после создания заказа.

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

1. Использование WP-Cron для регулярной проверки заказов

Для запуска автоматической очистки необходимо добавить задачу в WP-Cron, которая будет проверять заказы и удалять те, что старше указанного срока и имеют статус pending или failed.

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

if ( ! wp_next_scheduled( 'wc_delete_unpaid_orders_daily' ) ) {
    wp_schedule_event( time(), 'daily', 'wc_delete_unpaid_orders_daily' );
}

add_action( 'wc_delete_unpaid_orders_daily', 'wc_delete_unpaid_orders_older_than' );

function wc_delete_unpaid_orders_older_than() {
    $days = 1; // Удалять заказы старше 1 дня
    $cutoff = strtotime( "-{$days} days" );

    $args = array(
        'status' => array( 'pending', 'failed' ),
        'date_created' => '<' . date( 'Y-m-d H:i:s', $cutoff ),
        'limit' => -1,
        'return' => 'ids',
    );

    $orders = wc_get_orders( $args );
    if ( empty( $orders ) ) {
        return;
    }

    foreach ( $orders as $order_id ) {
        $order = wc_get_order( $order_id );
        if ( $order ) {
            $order->delete( true ); // true — удалить из базы полностью
        }
    }
}

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

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

  • Подождите 24 часа после создания тестового неоплаченного заказа с любым статусом pending или failed.
  • Проверьте в админке WooCommerce — заказ должен исчезнуть.
  • Для ускоренной проверки можно временно изменить переменную $days на 0 и создать заказ с датой создания в прошлом (через SQL или программно).
  • Проверьте логи ошибок PHP и WP-Cron (например, с помощью плагина WP Crontrol) для подтверждения выполнения задачи.

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

  • Крон-задача не запускается: WP-Cron зависит от посещений сайта. Для точного срабатывания рекомендуется настроить системный cron на сервере, вызывающий wp-cron.php.
  • Заказы не удаляются: Проверьте, что статус заказа совпадает с указанными в фильтре (pending, failed). Если используются другие статусы для неоплаченных заказов, добавьте их в массив 'status'.
  • Удаляются оплаченные заказы: Код использует фильтр по статусу, но если изменили логику, проверьте условия удаления. Никогда не удаляйте заказы со статусом processing или completed.
  • Проблемы с производительностью при большом количестве заказов: Используйте пагинацию (параметр 'limit' в wc_get_orders) и удаляйте партиями.

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

  • Перед удалением заказов рекомендуется создавать резервные копии базы данных — удаление невозможно отменить.
  • Добавьте логирование действий удаления, чтобы отслеживать, какие заказы были удалены и когда.
  • Для больших магазинов задачу cron лучше запускать не чаще раза в сутки, чтобы не перегружать сервер.
  • Если магазин работает на сайте с высокой посещаемостью, настройте системный cron вместо стандартного WP-Cron для надёжности.

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

МетодОписаниеПлюсыМинусы
Код через WP-Cron (как в статье) Автоматическое удаление заказов через заданный интервал времени. Гибкость, контроль, не требует сторонних плагинов. Зависит от работы WP-Cron, возможны задержки.
Плагины очистки базы WooCommerce Готовые решения с интерфейсом для удаления заказов. Простота настройки, часто дополнительные функции. Могут влиять на производительность, риски безопасности при неправильной настройке.
Ручное удаление через SQL Прямое удаление заказов в базе данных. Быстрое выполнение, не зависит от WP. Высокий риск ошибок, требует знаний SQL, не рекомендуется.
Как разделить двухколоночный контекст в WordPress
09.11.2025
Как удалить или изменить определённые записи WooCommerce после оформления заказа
04.07.2026
WooCommerce: автоматическое удаление неоплаченных заказов через заданное время
17.07.2026
Как автоматически обновлять контент в WordPress с помощью WP-Cron
10.04.2026
Решение проблемы нестандартных типов полей в WordPress
07.12.2025