Автоматическое удаление заказов по статусу в WordPress

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

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

Интернет-магазины на WooCommerce или других системах заказов в WordPress могут накапливать большое количество заказов в различных статусах: отменённые, в ожидании оплаты, завершённые и т.д. Удаление старых или отменённых заказов позволяет:

  • Снизить размер базы данных и ускорить работу сайта;
  • Избавиться от неактуальной информации для аналитики и отчетов;
  • Упростить администрирование и повысить удобство работы с заказами.

Однако важно делать это аккуратно, чтобы не потерять нужные данные. Поэтому автоматизация должна учитывать статус заказа и период его старения.

Создание автоматического удаления заказов с помощью WP Cron

Для автоматического удаления заказов по статусу можно использовать системный планировщик задач в WordPress — WP Cron. Ниже пример кода, который удаляет заказы со статусом "cancelled" старше 30 дней.

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

function wporder_delete_old_cancelled_orders() {
    $args = array(
        'post_type' => 'shop_order',
        'post_status' => 'wc-cancelled',
        'date_query' => array(
            array(
                'column' => 'post_date',
                'before' => '30 days ago',
            ),
        ),
        '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( 'wporder_delete_old_cancelled_orders_event' ) ) {
    wp_schedule_event( time(), 'daily', 'wporder_delete_old_cancelled_orders_event' );
}

add_action( 'wporder_delete_old_cancelled_orders_event', 'wporder_delete_old_cancelled_orders' );

В этом коде мы создаём задачу, которая каждый день ищет отменённые заказы старше 30 дней и удаляет их. Обратите внимание, что post_status для заказов WooCommerce начинается с префикса wc-.

Расширение функционала: удаление заказов по нескольким статусам и с логом

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

function wporder_delete_old_orders_by_statuses() {
    $statuses = array( 'wc-cancelled', 'wc-failed' ); // статусы для удаления
    $args = array(
        'post_type' => 'shop_order',
        'post_status' => $statuses,
        'date_query' => array(
            array(
                'column' => 'post_date',
                'before' => '30 days ago',
            ),
        ),
        'posts_per_page' => -1,
        'fields' => 'ids',
    );

    $orders = get_posts( $args );
    $deleted_orders = array();

    foreach ( $orders as $order_id ) {
        if ( wp_delete_post( $order_id, true ) ) {
            $deleted_orders[] = $order_id;
        }
    }

    if ( ! empty( $deleted_orders ) ) {
        error_log( 'WPOrder удалено заказов: ' . implode( ',', $deleted_orders ) );
    }
}

add_action( 'wporder_delete_old_cancelled_orders_event', 'wporder_delete_old_orders_by_statuses' );

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

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

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

  • WP Bulk Delete — позволяет удалять посты, включая заказы, по условию, в том числе по статусу и дате.
  • Advanced Database Cleaner — помогает очищать таблицы и удалять устаревшие данные, включая заказы WooCommerce.
  • Clearfy Pro — расширенный инструмент оптимизации, который среди прочего позволяет управлять удалением данных и кэшированием. Подробнее на wpshop.ru.

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

Советы по безопасному удалению заказов

Удаление заказов — ответственная задача, поэтому придерживайтесь рекомендаций:

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

Заключение

Автоматическое удаление заказов по статусу в WordPress помогает поддерживать сайт в порядке и оптимизировать работу базы данных. С помощью WP Cron и собственного кода можно реализовать гибкую систему, а готовые плагины упростят задачу для пользователей без навыков программирования. Важно подходить к удалению ответственно, чтобы не потерять нужные данные.

WooCommerce: решение проблемы с повторной обработкой платежей
09.06.2026
Как добавить собственный файл обработки платежей в WooCommerce
17.04.2026
Как создать автоматически обновляемый список заказов в WordPress с фильтрами и AJAX
26.02.2026
Автоматическое создание отчёта по просмотрам и активности пользователей в WordPress
03.01.2026
WooCommerce: автоматическое удаление заказов по неоплаченному статусу
17.05.2026