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

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

В магазине на WooCommerce часто накапливаются неоплаченные заказы, что ведет к увеличению нагрузки на базу данных и усложняет управление заказами. Они сохраняются в статусе «ожидает оплаты» (pending) или «обработка» (on-hold), если покупатель не завершил оплату. Это может замедлять админку и мешать аналитике.

Чтобы проверить, есть ли такая проблема, выполните SQL-запрос в базе данных или используйте WP-CLI:

wp wc order list --status=pending,on-hold --format=csv | wc -l

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

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

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

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

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

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

    $orders = wc_get_orders($args);

    if (!empty($orders)) {
        foreach ($orders as $order_id) {
            wp_trash_post($order_id); // Перемещаем заказ в корзину
        }
    }
}

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

Добавим планировщик, чтобы запускать функцию ежедневно:

// Регистрируем событие при активации темы или плагина
function wprus_schedule_order_cleanup() {
    if (!wp_next_scheduled('wprus_daily_order_cleanup')) {
        wp_schedule_event(time(), 'daily', 'wprus_daily_order_cleanup');
    }
}
add_action('wp', 'wprus_schedule_order_cleanup');

// Привязываем функцию к событию
add_action('wprus_daily_order_cleanup', 'wprus_delete_old_unpaid_orders');

// Очищаем расписание при деактивации
function wprus_clear_order_cleanup_schedule() {
    $timestamp = wp_next_scheduled('wprus_daily_order_cleanup');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wprus_daily_order_cleanup');
    }
}

3. Ручной запуск для тестирования

Для проверки работы функции вызовите ее напрямую из админки или через WP-CLI:

wp eval 'wprus_delete_old_unpaid_orders();'

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

Проверьте изменения через админ-панель WooCommerce → Заказы. Заказы с указанным статусом и датой старше 7 дней должны быть перемещены в корзину (Trash). Также можно снова выполнить SQL-запрос или WP-CLI команду из раздела диагностики — число неоплаченных старых заказов должно уменьшиться.

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

  • Заказы не удаляются: Убедитесь, что WP-Cron работает корректно. Проверьте, нет ли конфликтов с плагинами, блокирующими WP-Cron.
  • Удаляются нужные заказы: Проверьте условие по дате и статусу в wc_get_orders. Возможно, стоит увеличить срок хранения или добавить дополнительные статусы, чтобы не потерять важные заказы.
  • Ошибка из-за ограничения памяти: При большом количестве заказов разбейте удаление на части, используя пагинацию (limit и offset).

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

  • Используйте wp_trash_post, а не wp_delete_post, чтобы иметь возможность восстановить ошибочно удалённые заказы.
  • Настройте резервное копирование перед внедрением автоматического удаления.
  • Для больших магазинов с тысячами заказов лучше использовать WP-CLI скрипты, запускаемые по cron вне WordPress, чтобы не нагружать сайт.
  • Отслеживайте логи выполнения cron-задач (можно использовать плагин WP Crontrol) для своевременного выявления сбоев.

Сравнение способов очистки старых заказов WooCommerce

МетодПлюсыМинусыКогда использовать
WP-Cron + PHP код (как в статье)Автоматизация, не требует внешних скриптовЗависит от трафика сайта, может не сработать вовремяНебольшие и средние магазины
WP-CLI скрипты по системному cronНадежно, не зависит от посещений сайтаТребует доступа к серверу и настройки cronКрупные магазины с большим трафиком
Плагины для автоматической очисткиПростая настройка, графический интерфейсМожет быть избыточно, влиять на производительностьДля пользователей без навыков программирования
Как создать свой плагин в WordPress с нулевого уровня: пошаговое руководство
23.11.2025
Как удалить неиспользуемые теги в WordPress: эффективные методы и примеры
18.12.2025
Как добавить защиту от Brute Force атак в WordPress без плагинов
18.02.2026
Как добавить кастомный REST API endpoint в WordPress с примером кода
07.03.2026
WooCommerce: как разрешить или запретить возврат товаров по ролям пользователей
19.04.2026
×
-15%
на премиум плагин
My Popup

Повысьте конверсию!

Получить скидку »