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

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

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

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

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

1. Создание WP-Cron задачи

Лучший способ автоматизировать удаление — использовать WP-Cron, который будет запускать функцию очистки по расписанию.

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

2. Функция удаления заказов

Напишем функцию, которая выбирает заказы с нужными статусами и датой старше N дней, а затем удаляет их.

function wpcoder_delete_old_orders() {
    $days = 30; // Время хранения заказов
    $statuses = array('cancelled', 'failed'); // Статусы для удаления

    $date_threshold = date( 'Y-m-d H:i:s', strtotime( "-{$days} days" ) );

    $args = array(
        'post_type'      => 'shop_order',
        'post_status'    => array_map(function($status) { return 'wc-' . $status; }, $statuses),
        'date_query'     => array(
            array(
                'column' => 'post_date',
                'before' => $date_threshold,
            ),
        ),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );

    $orders = get_posts( $args );

    if ( ! empty( $orders ) ) {
        foreach ( $orders as $order_id ) {
            wp_delete_post( $order_id, true ); // true — безвозвратно
        }
    }
}
add_action( 'wpcoder_delete_old_orders_event', 'wpcoder_delete_old_orders' );

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

Чтобы проверить, что удаление работает:

  • В админке WooCommerce зайдите в раздел заказов и отфильтруйте по статусам cancelled и failed.
  • Проверьте даты заказов — удалите вручную несколько старых для теста и запустите WP-Cron вручную (через WP-CLI или плагин WP Crontrol).
  • Проверьте, что эти заказы исчезли из базы.

Запуск WP-Cron вручную через WP-CLI:

wp cron event run wpcoder_delete_old_orders_event

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

  • Заказы не удаляются: Проверьте, что WP-Cron действительно работает. В некоторых случаях хостинг блокирует WP-Cron, тогда нужно настроить системный cron.
  • Удаляются не те заказы: Убедитесь, что статусы заказов указаны правильно с префиксом wc-, например, wc-cancelled.
  • Удаление занимает много времени: Ограничьте количество заказов для удаления за один запуск, добавьте пагинацию.
  • Потеря важных данных: Сделайте резервную копию базы перед внедрением.

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

  • Используйте wp_delete_post( $order_id, true ) только если уверены, что заказы действительно не нужны. Альтернативно можно использовать false для перемещения в корзину с возможностью восстановления.
  • Для больших баз данных разбивайте удаление на части, например, по 100 заказов за один запуск, чтобы избежать таймаутов.
  • Регулярно оптимизируйте таблицы базы данных с помощью плагинов или SQL-команд OPTIMIZE TABLE wp_posts и OPTIMIZE TABLE wp_postmeta.
  • Если хотите более гибкое управление, рассмотрите плагин Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpcoder.ru&utm_medium=article&utm_campaign=woocommerce-udalit-zakazy-po-vozrastu-i-statusu) — там есть инструменты для очистки базы WooCommerce.

Альтернативы: плагин или код?

МетодПлюсыМинусыКогда выбрать
Код на PHP с WP-CronГибкость, легковесность, полный контрольТребует навыков программирования, возможность ошибокЕсли нужен кастомный фильтр и автоматизация без сторонних плагинов
Плагины очистки WooCommerceПростота настройки, поддержка, дополнительные функцииНагрузка на сайт, зависимость от обновленийЕсли нужно быстро, без кода, или комплексное управление базой
Как добавить поддержку WebP в WordPress: практическое руководство
14.04.2026
WooCommerce: автоматическая смена статуса заказа при отсутствии оплаты
19.05.2026
Как создать эффективный кеш в WordPress с помощью перегрузки функций
22.11.2025
Автоматическое сохранение и обновление мета-полей при изменении записи в WordPress
19.12.2025
Как удалить или сбросить пароль в WordPress через базу данных MySQL
17.04.2026