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

|

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

В интернет-магазине на WooCommerce часто накапливаются заказы со статусом on-hold, pending или failed, которые не были завершены покупателем. Такие заказы увеличивают нагрузку на базу данных, замедляют работу админки и создают путаницу в отчетах.

Чтобы определить, есть ли проблема, можно выполнить запрос к базе данных:

SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' AND post_status IN ('wc-pending', 'wc-on-hold', 'wc-failed');

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

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

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

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

function delete_inactive_wc_orders() {
    $statuses = ['pending', 'on-hold', 'failed'];
    $days_limit = 30; // Количество дней, после которого заказы считаются неактивными

    foreach ( $statuses as $status ) {
        $args = [
            'limit'        => -1,
            'status'       => $status,
            'date_created' => '<' . ( time() - DAY_IN_SECONDS * $days_limit ),
            'return'       => 'ids',
        ];

        $orders = wc_get_orders( $args );

        foreach ( $orders as $order_id ) {
            wp_delete_post( $order_id, true );
        }
    }
}

2. Планировщик задач WP-Cron для автоматизации

Добавьте планировщик, который будет запускать удаление раз в сутки:

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

add_action( 'delete_inactive_wc_orders_cron', 'delete_inactive_wc_orders' );

3. Очистка планировщика при деактивации

Чтобы избежать утечек задач, добавьте код для удаления планировщика при деактивации плагина или темы:

function remove_inactive_orders_cron() {
    $timestamp = wp_next_scheduled( 'delete_inactive_wc_orders_cron' );
    if ( $timestamp ) {
        wp_unschedule_event( $timestamp, 'delete_inactive_wc_orders_cron' );
    }
}
register_deactivation_hook( __FILE__, 'remove_inactive_orders_cron' );

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

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

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

Сравнение вариантов автоматического удаления заказов

МетодПлюсыМинусы
Ручное удаление через админкуПросто, без кодаТрудоемко, не автоматично
Плагин (например, WooCommerce Cleanup)Удобный интерфейс, настройкиДополнительные зависимости, нагрузка
Кастомный код + WP-CronЛегковесно, гибко, без сторонних плагиновТребует навыков, настройка cron
WooCommerce: как автоматически удалять отменённые и неактивные заказы
03.07.2026
Как автоматически отказывать в доступе неавторизованным пользователям в WordPress
08.04.2026
WooCommerce: как автоматически удалять отзывы о товарах через заданный период
30.04.2026
Как использовать OmniVideo для автоматического видео-контента в WordPress
19.03.2026
Как создать простой шорткод для вывода отзывов в WordPress
16.03.2026
×
-15%
на премиум плагин
Clearfy

Защитите сайт!

Включить Clearfy »