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

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

В WooCommerce незаконченые или «зависшие» заказы — это записи, которые создаются, но не завершаются пользователем: например, пользователь начал оформление, но не оплатил заказ. Такие заказы занимают место в базе данных, могут замедлять админку и мешать аналитике продаж. Автоматическое удаление таких заказов помогает поддерживать базу в чистоте и оптимизировать работу магазина.

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

Для начала нужно определить, есть ли у вас такие заказы и сколько их. В админке WooCommerce перейдите в раздел Заказы и отфильтруйте по статусам pending, failed, on-hold. Обратите внимание на заказы с датой создания более 24-48 часов назад — они с большой вероятностью уже неактивны.

Для более точной диагностики можно выполнить SQL-запрос к базе данных:

SELECT ID, post_date, post_status FROM wp_posts WHERE post_type = 'shop_order' AND post_status IN ('wc-pending', 'wc-failed') AND post_date < NOW() - INTERVAL 2 DAY;

Если таких заказов много (сотни и более), это повод автоматизировать их удаление.

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

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

function wpacademy_delete_old_unpaid_orders() {
    $days_to_keep = 2; // количество дней для хранения заказов
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_to_keep . ' days'));

    $args = array(
        'post_type'      => 'shop_order',
        'post_status'    => array('wc-pending', 'wc-failed'),
        'date_query'     => array(
            array(
                'column' => 'post_date',
                'before' => $date_threshold,
            ),
        ),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );

    $orders = get_posts($args);

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

2. Добавляем крон-задачу для регулярного запуска

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

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

add_action('wpacademy_daily_delete_old_orders', 'wpacademy_delete_old_unpaid_orders');

Этот код будет запускать функцию удаления один раз в сутки.

3. Очистка корзины с удаленными заказами (опционально)

WooCommerce перемещает заказы в корзину, но они не удаляются сразу. Чтобы полностью удалить, добавьте:

function wpacademy_empty_trash_orders() {
    global $wpdb;
    $wpdb->query("DELETE FROM $wpdb->posts WHERE post_type = 'shop_order' AND post_status = 'trash'");
}
add_action('wpacademy_daily_delete_old_orders', 'wpacademy_empty_trash_orders', 20);

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

  • Через 1-2 дня проверьте раздел Заказы в админке — старые заказы со статусами pending и failed, которым больше 2 дней, должны исчезнуть.
  • В базе данных выполните SQL-запрос из раздела диагностики — он не должен возвращать такие заказы.
  • Проверьте логи Cron или используйте плагин WP Crontrol для контроля выполнения задач.

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

  • Заказы не удаляются: Убедитесь, что cron-задание зарегистрировано и запускается. Проверьте, нет ли ошибок в логах PHP.
  • Удаляются нужные заказы: Проверьте, что статус заказа указан правильно. Не используйте статус processing или completed в фильтре.
  • Заказы остаются в корзине: Добавьте функцию очистки корзины, как показано выше.
  • Функция сильно нагружает сервер: Ограничьте количество удаляемых заказов за один запуск, добавив параметр 'posts_per_page' => 50 и запуск крон чаще, например, каждые 6 часов.

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

  • Создавайте резервные копии базы данных перед внедрением автоматического удаления заказов.
  • Используйте транзакции и проверяйте права пользователя, если расширяете функционал для админов.
  • Для крупных магазинов с тысячами заказов лучше запускать удаление партиями, чтобы снизить нагрузку на сервер.
  • Если не хотите писать код, рассмотрите плагины типа Clearfy Pro, которые включают инструменты для очистки базы WooCommerce.

Таблица сравнения методов удаления незаконченых заказов WooCommerce

МетодПреимуществаНедостаткиКогда использовать
Код на PHP с WP-CronГибкость, бесплатность, контрольНужно писать код, возможна нагрузкаДля разработчиков и магазинов со средней нагрузкой
Плагин Clearfy ProПростота, дополнительные функции оптимизацииПлатный, лишние функции, если нужны только заказыДля тех, кто хочет комплексное решение без кода
Ручное удаление через админкуПростота, нет риска ошибок кодаТрудоемко, не автоматизированоМаленькие магазины с редкими случаями
Как удалить или скрыть свойства товара WooCommerce в админке WordPress
20.04.2026
Как удалить старые варианты товаров в WooCommerce без плагинов
19.05.2026
Как удалить пустые теги в WordPress: эффективные методы
15.04.2026
Как добавить поддержку виджетов Gutenberg в собственную тему WordPress
08.01.2026
Как избежать проблем с отправкой писем через PHP mail() в WordPress
03.05.2026