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

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

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

Проверить количество неоплаченных заказов можно в админке WooCommerce в разделе "Заказы" с фильтром по статусу "Ожидает оплаты" или с помощью SQL-запроса:

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

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

1. Добавляем пользовательский WP-Cron для удаления заказов

Создадим функцию в functions.php вашей темы или в кастомном плагине, которая будет удалять заказы в статусе wc-pending, созданные более 7 дней назад.

function wpbe_delete_old_pending_orders() {
    global $wpdb;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-7 days'));

    // Получаем ID заказов со статусом wc-pending старше 7 дней
    $order_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} 
         WHERE post_type = 'shop_order' 
         AND post_status = 'wc-pending' 
         AND post_date < %s",
        $date_threshold
    ));

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

2. Регистрируем событие WP-Cron

Добавим задачу, которая будет запускать функцию ежедневно. Для этого используем хук wp и функцию wp_schedule_event.

function wpbe_schedule_pending_order_deletion() {
    if (!wp_next_scheduled('wpbe_daily_pending_order_cleanup')) {
        wp_schedule_event(time(), 'daily', 'wpbe_daily_pending_order_cleanup');
    }
}
add_action('wp', 'wpbe_schedule_pending_order_deletion');

// Связываем событие с функцией удаления
add_action('wpbe_daily_pending_order_cleanup', 'wpbe_delete_old_pending_orders');

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

  • Выполните вручную функцию удаления из консоли или с помощью вызова wpbe_delete_old_pending_orders() через админку (например, подключившись к functions.php временно).
  • Проверьте, что заказы со статусом wc-pending, созданные более 7 дней назад, исчезли из списка заказов в админке.
  • Запустите WP-Cron вручную (например, через WP-CLI wp cron event run wpbe_daily_pending_order_cleanup) и убедитесь, что функция сработала.
  • Следите за базой данных, чтобы количество неоплаченных заказов не увеличивалось бесконтрольно.

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

  • WP-Cron не срабатывает регулярно: по умолчанию WP-Cron запускается при посещении сайта. Если трафик низкий, можно настроить системный cron для вызова wp-cron.php или использовать плагин для мониторинга cron.
  • Удаление заказов не происходит: проверьте права пользователя или ограничения на удаление постов. Убедитесь, что функция wp_delete_post вызывается с параметром true для полного удаления.
  • Удаляются нужные заказы: проверьте условие по дате и статусу, чтобы не затронуть актуальные заказы. Желательно тестировать на копии сайта.
  • Ошибки в SQL-запросе: используйте $wpdb->prepare для безопасности и корректности запроса.

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

  • Для больших магазинов с тысячами заказов используйте пакетное удаление (например, по 50 заказов за раз), чтобы избежать перегрузки сервера.
  • Резервное копирование базы данных перед внедрением автоматического удаления обязательно.
  • Для контроля можно настроить логирование удалённых заказов в отдельный файл или таблицу.
  • Не удаляйте заказы, которые могут понадобиться для отчетов или бухгалтерии — при необходимости вместо удаления используйте смену статуса.
  • Если вы используете плагин Clearfy Pro, в нем есть опции для оптимизации базы WooCommerce, которые можно рассмотреть в дополнение к кастомным решениям (https://wpshop.ru/plugins/clearfy?utm_source=wpbe.ru&utm_medium=article&utm_campaign=woocommerce-udalit-neoplachennye-zakazy-posle-7-dnej).

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

МетодПлюсыМинусыРекомендуется для
Ручное удаление через админкуПростота, контрольТрудозатратно при большом объемеМаленькие магазины
WP-Cron + пользовательский код (как в статье)Автоматизация, гибкостьНужны базовые знания PHP, настройка WP-CronСредние и крупные магазины
Плагины очистки базы (Clearfy Pro, WP-Optimize)Простота, дополнительные функцииМеньший контроль, возможны конфликтыВсе уровни, при отсутствии кастомных требований
WooCommerce: автоматическое удаление заказов после отмены или возврата
16.05.2026
Как использовать AJAX для динамической загрузки контента в WordPress
01.02.2026
Как автоматизировать удаление нерабочих редиректов в WordPress
12.01.2026
Оптимизация базы данных WordPress: эффективные методы и примеры кода
10.11.2025
WooCommerce: автоматическое удаление заказов по просроченным срокам
04.06.2026