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

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

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

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

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

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

Если таких заказов много, они могут влиять на производительность и усложнять поиск нужных заказов.

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

WooCommerce не имеет встроенного механизма для автоматического удаления заказов по времени. Для этого нужно добавить кастомный код в functions.php вашей темы или создать небольшой плагин.

1. Добавляем WP-Cron задачу для удаления заказов

function wpid_schedule_delete_unpaid_orders() {
    if ( ! wp_next_scheduled( 'wpid_delete_unpaid_orders_event' ) ) {
        wp_schedule_event( time(), 'hourly', 'wpid_delete_unpaid_orders_event' );
    }
}
add_action( 'wp', 'wpid_schedule_delete_unpaid_orders' );

Этот код регистрирует событие, которое будет запускаться каждый час.

2. Реализация функции удаления неоплаченных заказов старше 24 часов

function wpid_delete_unpaid_orders() {
    $args = array(
        'limit'        => -1,
        'status'       => array('pending', 'on-hold'),
        '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( 'wpid_delete_unpaid_orders_event', 'wpid_delete_unpaid_orders' );

Здесь мы ищем заказы со статусом pending или on-hold, которые были созданы более 24 часов назад, и удаляем их без возможности восстановления.

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

Чтобы убедиться, что удаление работает:

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

Для запуска WP-Cron вручную можно использовать плагины, например WP Crontrol.

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

  • Крон-задача не запускается: Проверьте, работает ли WP-Cron на вашем сайте. На некоторых серверах WP-Cron отключён. Можно настроить системный cron на сервере для вызова wp-cron.php.
  • Заказы не удаляются: Убедитесь, что статусы заказов в коде совпадают с используемыми в вашем магазине. Статусы могут отличаться, например, custom-статусы.
  • Удаляются нужные заказы: Проверьте фильтр по дате и статусу, чтобы не удалить оплаченные или важные заказы.

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

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

Чек-лист для внедрения автоматического удаления заказов

  1. Проверьте наличие неоплаченных заказов старше 24 часов.
  2. Добавьте WP-Cron задачу для регулярного запуска удаления.
  3. Напишите функцию удаления заказов с правильными статусами и датой.
  4. Проверьте работу задачи через WP Crontrol или вручную.
  5. Отслеживайте логи и корректируйте частоту и объём удаления.
  6. Обязательно делайте бэкапы перед изменениями.

Сравнение вариантов решения

МетодПлюсыМинусыПример использования
Код с WP-Cron Гибко, бесплатно, подстроено под конкретные задачи Нужно писать и тестировать код, зависит от WP-Cron Пример из статьи
Плагины автоматического удаления заказов Простота настройки, интерфейс Может быть лишний функционал, нагрузка, стоимость WooCommerce Order Status Manager + автоочистка
Ручное удаление Полный контроль Трудоёмко, риск ошибки, не автоматично Админка WooCommerce
WooCommerce: как автоматически удалять товары после покупки
20.05.2026
WooCommerce: как исключить товары из корзины по атрибутам
13.07.2026
WooCommerce: как отключить кэширование страницы корзины для корректной работы
01.07.2026
WooCommerce: как автоматически удалять неактуальные купоны
05.07.2026
WooCommerce: как автоматически удалять неактуальные купоны
05.07.2026