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

|

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

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

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

Удаление старых заказов помогает:

Но при этом важно сохранить данные заказчиков и финансовую отчётность, поэтому удалять стоит только те заказы, которые точно не нужны.

Удаление заказов по статусу и дате: какие статусы можно удалять

В WooCommerce заказам присвоены статусы, такие как completed (завершён), cancelled (отменён), failed (неудачный), refunded (возврат) и другие. Обычно для удаления подходят заказы со статусами cancelled, failed, а также completed, если они старше определённого срока.

Рекомендуется не удалять заказы с активным статусом processing или on-hold, так как они могут быть в процессе оплаты или доставки.

Пример выбора заказов для удаления:

Автоматизация удаления заказов с помощью собственного кода

Создадим функцию, которая будет запускаться через WP-Cron по расписанию и удалять заказы, соответствующие условиям. Это позволит выполнять очистку базы без ручного вмешательства.

Пример кода для functions.php или отдельного плагина:

function wpdetect_delete_old_woocommerce_orders() {
    if ( ! class_exists( 'WooCommerce' ) ) {
        return; // WooCommerce не активен
    }

    $statuses_to_delete = array( 'cancelled', 'failed', 'refunded' );
    $date_completed = date( 'Y-m-d H:i:s', strtotime( '-6 months' ) ); // Порог по дате

    // Получаем заказы для удаления
    $args = array(
        'post_type'      => 'shop_order',
        'post_status'    => array_map( function($status) {
            return 'wc-' . $status;
        }, $statuses_to_delete ),
        'date_query'     => array(
            array(
                'column' => 'post_date',
                'before' => $date_completed,
            ),
        ),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );

    $orders = get_posts( $args );

    foreach ( $orders as $order_id ) {
        wp_delete_post( $order_id, true ); // Удаляем навсегда
    }
}

// Регистрируем событие WP-Cron
if ( ! wp_next_scheduled( 'wpdetect_delete_old_orders_event' ) ) {
    wp_schedule_event( time(), 'daily', 'wpdetect_delete_old_orders_event' );
}

add_action( 'wpdetect_delete_old_orders_event', 'wpdetect_delete_old_woocommerce_orders' );

Этот код ежедневно проверяет и удаляет заказы со статусами cancelled, failed и refunded старше 6 месяцев. Можно дополнительно добавить логи для отслеживания удалений.

Удаление заказов со статусом completed старше 1 года

Для заказов с завершённым статусом, которые обычно важны для отчётности, можно сделать отдельную функцию с более длинным сроком:

function wpdetect_delete_completed_orders_older_than_year() {
    if ( ! class_exists( 'WooCommerce' ) ) {
        return;
    }

    $date_completed = date( 'Y-m-d H:i:s', strtotime( '-1 year' ) );

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

    $orders = get_posts( $args );

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

add_action( 'wpdetect_delete_old_completed_orders_event', 'wpdetect_delete_completed_orders_older_than_year' );

if ( ! wp_next_scheduled( 'wpdetect_delete_old_completed_orders_event' ) ) {
    wp_schedule_event( time(), 'weekly', 'wpdetect_delete_old_completed_orders_event' );
}

Использование плагинов для удаления заказов в WooCommerce

Если писать код не хочется, можно воспользоваться готовыми плагинами:

Плагины часто имеют дополнительные функции, например, удаление связанных мета-данных, кэширование и отчёты, что полезно для комплексной оптимизации.

Рекомендации по безопасности и резервному копированию

Перед автоматическим удалением заказов обязательно делайте резервные копии базы данных. Для этого подойдёт плагин WPDetect, который умеет создавать автоматические бэкапы и отслеживать изменения.

Также рекомендуем запускать удаление старых заказов в часы низкой нагрузки, чтобы избежать замедления работы сайта для пользователей.

Выводы и практические советы

Автоматизация удаления старых заказов в WooCommerce — важная задача для поддержания производительности и оптимизации базы данных. Вы можете реализовать это как с помощью кода, так и с помощью плагинов. Главное — чётко определить, какие заказы удалять, и обеспечить резервное копирование перед удалениями.

Используйте WP-Cron для запуска регулярных задач, добавляйте логи и уведомления, чтобы контролировать процесс. Если нужен удобный интерфейс и дополнительные функции, выбирайте проверенные плагины с хорошими отзывами.

Как создать собственный шорткод с параметрами в WordPress
16.11.2025
Как автоматизировать управление и решение проблем с PHP-ошибками в WordPress
22.02.2026
Диагностика и решение проблем с отправкой писем из WordPress через SMTP
24.06.2026
Как автоматизировать отключение неиспользуемых категорий в WordPress
30.03.2026
Как автоматизировать удаление старых комментариев в WordPress
08.04.2026
×
-15%
на премиум плагин
My Popup

Повысьте конверсию!

Получить скидку »