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

|

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

В интернет-магазинах на WooCommerce со временем накапливаются заказы, которые не актуальны: отменённые, неактивные или ожидающие оплаты очень долго. Это приводит к росту размера базы данных, замедлению запросов и усложнению управления заказами в админке.

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

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

Обратите внимание на количество заказов со статусами wc-cancelled, wc-failed и wc-pending (если они долго не меняются). Большое число таких записей — сигнал к автоматизации удаления.

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

1. Создание функции для удаления заказов

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

function wpreboot_delete_old_orders() {
    global $wpdb;
    $days = 30; // удалять заказы старше 30 дней
    $statuses = ['wc-cancelled', 'wc-failed'];

    foreach ( $statuses as $status ) {
        $orders = $wpdb->get_results(
            $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
            )
        );

        if ( ! empty($orders) ) {
            foreach ( $orders as $order ) {
                wp_delete_post( $order->ID, true ); // true - удалить навсегда
            }
        }
    }
}

2. Запуск функции через WP-Cron

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

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

add_action( 'wpreboot_daily_order_cleanup', 'wpreboot_delete_old_orders' );

Этот код создаст ежедневную задачу, которая будет удалять заказы старше 30 дней с указанными статусами.

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

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

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

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

МетодПлюсыМинусы
Код в functions.php + WP-CronПолный контроль, бесплатно, гибкоЗависит от WP-Cron, требует навыков
Плагины очистки заказовПростота настройки, интерфейсДополнительные плагины, нагрузка
Ручное удаление через SQLМоментальный эффектРиски потери данных, требует знаний SQL
Как автоматически удалять старые чужие сайты из базы данных WordPress
13.01.2026
Как автоматически отказывать в доступе неавторизованным пользователям в WordPress
08.04.2026
Как добавить автоматическое удаление старого контента в WordPress
22.03.2026
WooCommerce: как автоматически отключить отложенные заказы через код
16.06.2026
WooCommerce: как автоматически удалять товары из корзины после оплаты
20.05.2026
×
WPShop
партнерка без «но»!

До 3225₽ за каждую продажу

Подключиться к игре