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

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

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

Как определить, какие заказы можно удалять

  • Статусы заказов: отменённые (cancelled), отклонённые (failed), ожидающие оплаты (pending), обработанные (processing) и т.д.
  • Возраст заказа: например, удалять отменённые заказы старше 30 дней, а ожидающие оплаты — старше 7 дней.
  • Необходимость архивации: если важна история, лучше не удалять, а архивировать или экспортировать данные перед удалением.

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

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

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

    $date_query = array(
        'before' => date('Y-m-d', strtotime("-{$days_old} days")),
        'inclusive' => true,
    );

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

    $orders = get_posts($args);
    if (empty($orders)) {
        return;
    }

    foreach ($orders as $order_id) {
        wp_delete_post($order_id, true); // true — удаление без корзины
    }
}

add_action('wpfind_daily_delete_orders', 'wpfind_delete_old_orders');

// Регистрируем ежедневное событие, если не зарегистрировано
if (!wp_next_scheduled('wpfind_daily_delete_orders')) {
    wp_schedule_event(time(), 'daily', 'wpfind_daily_delete_orders');
}

Как проверить, что автоматическое удаление работает

  • Зайдите в базу данных (через phpMyAdmin или другой инструмент) и проверьте наличие заказов нужных статусов и даты.
  • Запустите функцию вручную, добавив вызов wpfind_delete_old_orders(); в файл и обновив сайт, чтобы проверить удаление.
  • Проверьте в админке WooCommerce, что устаревшие заказы отсутствуют.
  • Посмотрите логи сервера/сайта на наличие ошибок при выполнении WP-Cron.

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

  • Не срабатывает WP-Cron: на некоторых хостингах cron не запускается автоматически. Проверьте, запускается ли задача через wp cron event list (если есть WP-CLI) или настройте серверный cron.
  • Неправильные статусы заказов: забудьте добавить префикс wc- к статусам. В коде выше это учтено.
  • Удаление без бэкапа: всегда рекомендуется сделать экспорт заказов перед массовым удалением.
  • Удаление не тех заказов: проверьте условия date_query и статусы, чтобы не удалить важные данные.

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

  • Добавьте проверку прав пользователя или среды, если функция запускается не только по cron.
  • Если заказов много, разбивайте удаление на части, чтобы избежать таймаутов. Например, удаляйте по 100 заказов за раз, используя параметр posts_per_page.
  • Используйте плагины для бэкапа базы, чтобы быстро восстановить данные при ошибках.
  • Для более гибкого управления рассмотрите использование плагина Clearfy Pro (ссылка) — он позволяет фильтровать и удалять устаревшие данные безопасно.

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

МетодПлюсыМинусыПрименимость
Ручное удаление в админкеПростота, контрольМного времени при большом количествеМаленькие магазины
WP-Cron с пользовательским кодомАвтоматизация, гибкостьНужна настройка cron, возможны ошибкиСредние и большие магазины
Плагины очистки базы (Clearfy Pro и др.)Удобство, дополнительные функцииПлатные решения, зависимость от плагинаЛюбой масштаб
Как удалить связанные медиа файлы в WordPress: практическое руководство
23.12.2025
WooCommerce: решение проблемы с непоявлением вариаций при использовании кэширования
31.05.2026
Как избежать конфликтов между темами и плагинами WordPress
06.03.2026
Автоматическое создание записей из внешних источников в WordPress
15.12.2025
WooCommerce: автоматическое удаление заказов по статусу и срокам
14.05.2026

Сайт в разработке, скоро здесь будет портал о WordPress.