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

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

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

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

SELECT post_status, COUNT(ID) AS count_orders FROM wp_posts WHERE post_type = 'shop_order' GROUP BY post_status;

Затем проверьте количество заказов с заданным статусом и датой создания старше, например, 30 дней:

SELECT COUNT(ID) FROM wp_posts WHERE post_type = 'shop_order' AND post_status = 'wc-pending' AND post_date < NOW() - INTERVAL 30 DAY;

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

1. Определяем критерии удаления

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

  • wc-cancelled — отменённые заказы
  • wc-failed — неудачные заказы
  • wc-pending — ожидающие оплаты, если старше 30 дней

2. Создаем функцию удаления по расписанию

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

function wpai_delete_old_orders() {
    global $wpdb;
    $statuses = [ 'wc-cancelled', 'wc-failed', 'wc-pending' ];
    $days = 30;

    foreach ( $statuses as $status ) {
        // Для 'wc-pending' применяем фильтр по дате
        if ( $status === 'wc-pending' ) {
            $orders = $wpdb->get_col( $wpdb->prepare(
                "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'shop_order' AND post_status = %s AND post_date < NOW() - INTERVAL %d DAY",
                $status, $days
            ) );
        } else {
            $orders = $wpdb->get_col( $wpdb->prepare(
                "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'shop_order' AND post_status = %s",
                $status
            ) );
        }

        foreach ( $orders as $order_id ) {
            wp_delete_post( $order_id, true ); // true — без возможности восстановления
        }
    }
}

// Регистрируем cron задачу, если не зарегистрирована
if ( ! wp_next_scheduled( 'wpai_daily_delete_old_orders' ) ) {
    wp_schedule_event( time(), 'daily', 'wpai_daily_delete_old_orders' );
}

add_action( 'wpai_daily_delete_old_orders', 'wpai_delete_old_orders' );

3. Проверка и запуск

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

wp eval 'wpai_delete_old_orders();'

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

  • Запустите SQL-запросы из раздела диагностики до и после удаления, чтобы убедиться, что количество старых заказов уменьшилось.
  • В админке WooCommerce в разделе "Заказы" проверьте, что старые неактивные заказы отсутствуют.
  • Проверьте логи cron (например, плагином WP Crontrol) для успешного срабатывания задачи.

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

  • Заказы не удаляются: Проверьте, запущен ли cron WP. Если нет, используйте серверный cron или WP-CLI для запуска.
  • Удаляются нужные заказы: Проверьте фильтр по статусам и датам. Для большей безопасности можно добавить логирование ID удаляемых заказов.
  • Ошибки прав доступа: При использовании WP-CLI авторизуйтесь от имени администратора.

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

  • Всегда делайте резервную копию базы данных перед внедрением автоматического удаления.
  • Не удаляйте заказы, если у вас есть интеграции с CRM или 1С, которые требуют сохранения истории.
  • Добавьте логирование удалений в отдельный файл или таблицу для аудита.
  • Для крупных магазинов используйте пакетную обработку — удаляйте не более 100 заказов за один запуск, чтобы избежать таймаутов.
  • Рассмотрите возможность использования плагина Clearfy Pro для оптимизации базы с дополнительными функциями очистки.

Сравнение вариантов реализации удаления заказов

МетодПлюсыМинусыПрименимость
Ручное удаление через админкуПросто, без кодаТрудозатратно, риск пропустить заказыМалые магазины
Автоматизация через WP Cron и кодПолный контроль, без участия человекаНужна базовая разработка, возможны ошибкиСредние и крупные магазины
Плагины оптимизации базы (например, Clearfy Pro)Доп. функции, удобный интерфейсПлатные, могут не покрывать все кейсыВсе уровни, особенно при комплексной оптимизации
Как добавить автоматическое подгружание контента в WordPress с помощью AI
23.01.2026
WooCommerce: автоматическое изменение стоимости товара по акции через код
25.07.2026
WooCommerce: автоматическое удаление неактивных заказов через код
05.06.2026
Как оптимизировать работу AI-плагинов в WordPress
21.02.2026
Как автоматизировать отслеживание изменений в WordPress с помощью AI
17.03.2026