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

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

В магазинах на WooCommerce часто накапливаются заказы со статусом «неоплачено» или «ожидает оплаты». Если их не чистить, это приводит к перегрузке базы данных, усложняет учёт и может замедлить работу сайта. Особенно актуально для магазинов с большим количеством заказов и частыми отказами от оплаты.

Проверьте, сколько таких заказов у вас сейчас: в админке WooCommerce перейдите в Заказы и отфильтруйте по статусу «Ожидает оплаты» (pending) или «Неоплачено» (failed). Если их более нескольких сотен, стоит автоматизировать удаление.

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

1. Создаём функцию удаления заказов старше нужного срока

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

function wpclass_delete_old_unpaid_orders() {
    $days_limit = 7; // Удалять заказы старше 7 дней
    $date_limit = date('Y-m-d H:i:s', strtotime("-" . $days_limit . " days"));

    $args = [
        'status' => ['pending', 'failed'], // статусы неоплаченных заказов
        'date_created' => '<' . $date_limit,
        'limit' => -1, // без лимита
        'return' => 'ids',
    ];

    $orders = wc_get_orders($args);

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

2. Запускаем функцию по расписанию с помощью WP-Cron

Добавьте в functions.php:

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

add_action('wpclass_daily_delete_unpaid_orders', 'wpclass_delete_old_unpaid_orders');

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

3. Удаляем запланированное событие при деактивации темы или плагина

function wpclass_remove_delete_unpaid_orders_cron() {
    $timestamp = wp_next_scheduled('wpclass_daily_delete_unpaid_orders');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpclass_daily_delete_unpaid_orders');
    }
}
add_action('switch_theme', 'wpclass_remove_delete_unpaid_orders_cron');

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

  • Подождите 24 часа после внедрения или запустите функцию вручную, добавив временный вызов wpclass_delete_old_unpaid_orders(); в functions.php.
  • Проверьте количество заказов со статусом «pending» или «failed» в админке WooCommerce — должно уменьшиться.
  • В базе данных (таблица wp_posts с типом shop_order) проверьте, что заказы старше 7 дней удалены.

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

  • Не удаляются заказы: Проверьте права доступа и наличие функции wp_delete_post. Убедитесь, что стили статусов заказа указаны правильно — для WooCommerce «pending» и «failed».
  • Функция не запускается автоматически: Проверьте, работает ли WP-Cron. Попробуйте запустить вручную: введите в браузере https://ваш-сайт.ru/wp-cron.php?doing_wp_cron.
  • Удаляются не те заказы: Проверьте в коде условие 'date_created'=>'<'.$date_limit и статус заказа — возможно, нужно добавить или удалить статусы.

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

  • Удаление заказов — необратимая операция. Сделайте резервную копию базы перед активацией скрипта.
  • Период удаления (7 дней) можно варьировать, исходя из бизнес-процессов.
  • Для больших магазинов с тысячами заказов используйте WP CLI для пакетного удаления, чтобы не перегружать сервер.
  • Если WP-Cron не запускается (например, на некоторых хостингах), настройте системный cron на вызов wp-cron.php.

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

МетодПлюсыМинусы
WP-Cron + кастомный кодПолный контроль, бесплатно, гибкоЗависит от WP-Cron, требует навыков PHP
Плагины для очистки заказовПростота установки, интерфейсМожет нагружать сайт, ограничена кастомизация
WP CLI скрипты для удаленияЭффективно для больших сайтов, быстроТребует доступа к серверу и навыков командной строки
Удаление неиспользуемых атрибутов и метаданных в WooCommerce: практическое руководство
28.04.2026
Как отключить авто-знаки товаров в WooCommerce без потери функциональности
08.05.2026
Как удалить все скрипты и стили в WordPress
04.03.2026
Как создать динамический фильтр таксономий в WordPress для удобства пользователей
07.04.2026
WooCommerce: как автоматически удалять неоплаченные заказы по срокам
22.06.2026