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

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

Неоплаченные заказы (статус "pending" или "failed") могут накапливаться и засорять базу данных, замедлять работу магазина и создавать путаницу в админке. Автоматическое удаление таких заказов помогает держать базу в порядке и улучшает производительность сайта.

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

Чтобы проверить, есть ли у вас большое количество неоплаченных заказов, выполните следующий SQL-запрос в базе данных (например, через phpMyAdmin):

SELECT COUNT(ID) as count_pending FROM wp_posts WHERE post_type = 'shop_order' AND post_status = 'wc-pending';

Если количество заказов больше 100-200, это сигнал к автоматизации очистки.

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

1. Создаем функцию удаления заказов

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

function wpcource_delete_old_unpaid_orders() {
    $args = array(
        'post_type'      => 'shop_order',
        'post_status'    => array('wc-pending', 'wc-failed'),
        'date_query'     => array(
            array(
                'column'    => 'post_date',
                'before'    => '24 hours ago',
            ),
        ),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );

    $orders = get_posts($args);

    if (empty($orders)) {
        return;
    }

    foreach ($orders as $order_id) {
        wp_delete_post($order_id, true); // true - удаляет навсегда
    }
}

2. Запускаем функцию по расписанию (cron)

Добавьте планировщик, если он еще не установлен:

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

add_action('wpcource_daily_unpaid_orders_cleanup', 'wpcource_delete_old_unpaid_orders');

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

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

  • Создайте тестовый заказ в статусе "Ожидает оплаты" и установите дату создания более 24 часов назад (через базу или плагин для редактирования даты).
  • Запустите вручную функцию wpcource_delete_old_unpaid_orders() (через WP CLI или временно вызвав в шаблоне).
  • Проверьте, что заказ удалился из базы (через админку или SQL-запрос).
  • Убедитесь, что по расписанию заказы удаляются автоматически (проверьте журнал cron или логи сервера).

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

  • Заказы не удаляются: Проверьте, что функция вызывается через hook cron. Для отладки можно вызвать вручную.
  • Удаление происходит, но заказы остаются: Возможно, установлен плагин, блокирующий удаление заказов, или права на удаление ограничены.
  • Удаляются не те заказы: Проверьте, что в post_status указаны правильные статусы wc-pending и wc-failed.
  • Планировщик WP Cron не работает: Настройте системный cron или вызовите wp-cron.php регулярно с сервера.

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

  • Удаление заказов навсегда (wp_delete_post($order_id, true)) — операция необратимая, убедитесь, что вы не удаляете нужные заказы.
  • Чтобы избежать нагрузки, можно ограничивать количество удаляемых заказов за один запуск, например, задав 'posts_per_page' => 50 и запускать cron чаще.
  • Логируйте удаление заказов в отдельный файл или таблицу для аудита.
  • Запрещайте удаление заказов, если магазин интегрирован с внешними сервисами, чтобы не потерять данные.

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

МетодПлюсыМинусы
Плагин автоочистки (например, WP Clearfy Pro)Готовое решение, удобный интерфейс, дополнительные функцииЗависимость от плагина, нагрузка, стоимость
Код в functions.php с WP-CronПолный контроль, нет лишних плагиновТребуется отладка, возможны проблемы с WP-Cron
Внешний системный cron + WP-CLIМаксимальная надежность и производительностьНужен доступ к серверу, знания CLI
Как закрыть от индексации отдельные страницы WordPress без поломки SEO
22.08.2026
Как закрыть дубли страниц в WordPress от пагинации, фильтров и параметров
19.08.2026

Обучение разработке на WordPress, как создавать темы, плагины. Подробнее об обучении.