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

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

В интернет-магазинах на WooCommerce накопление неактивных заказов (статусы «отменен», «ожидает оплаты» или «в обработке» без движения долгое время) может замедлять работу базы данных и создавать лишний шум в админке. Особенно это актуально при больших объемах продаж и активных акциях. Ручное удаление таких заказов неудобно и требует времени.

Основные признаки накопления неактивных заказов:

  • В админке WooCommerce много заказов со статусом «ожидает оплаты» старше 30 дней
  • Большое количество заказов со статусом «отменен» или «в обработке», которые не менялись несколько месяцев
  • Замедление загрузки страниц с заказами из-за большого объема данных

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

1. Настройка WP-Cron для периодической очистки

Первое, что нужно сделать — создать функцию, которая будет удалять заказы старше определенного периода с нужными статусами. Затем подключить её к планировщику WordPress.

function wprobot_delete_old_inactive_orders() {
    if ( ! class_exists( 'WooCommerce' ) ) {
        return;
    }
    $statuses = array( 'pending', 'cancelled', 'failed' ); // Статусы для удаления
    $days_to_keep = 30; // Срок хранения заказов в днях

    $args = array(
        'status' => $statuses,
        'limit' => -1,
        'date_created' => '<' . ( time() - DAY_IN_SECONDS * $days_to_keep ),
        'return' => 'ids',
    );
    $orders = wc_get_orders( $args );

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

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

// Хук для вызова функции
add_action( 'wprobot_daily_delete_inactive_orders', 'wprobot_delete_old_inactive_orders' );

2. Проверка работы планировщика

Для диагностики, что крон сработал, можно добавить логирование в файл:

function wprobot_delete_old_inactive_orders() {
    if ( ! class_exists( 'WooCommerce' ) ) {
        return;
    }
    $statuses = array( 'pending', 'cancelled', 'failed' );
    $days_to_keep = 30;
    $args = array(
        'status' => $statuses,
        'limit' => -1,
        'date_created' => '<' . ( time() - DAY_IN_SECONDS * $days_to_keep ),
        'return' => 'ids',
    );
    $orders = wc_get_orders( $args );

    $deleted_count = 0;
    foreach ( $orders as $order_id ) {
        wp_delete_post( $order_id, true );
        $deleted_count++;
    }
    error_log( "[wprobot] Deleted $deleted_count old inactive orders" );
}

Посмотреть логи можно в файле wp-content/debug.log, если включен режим отладки WP_DEBUG и логирования WP_DEBUG_LOG.

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

Чтобы удостовериться, что функция работает корректно:

  • Проверьте наличие старых неактивных заказов через WooCommerce → Заказы до запуска скрипта
  • Запустите вручную функцию, добавив вызов wprobot_delete_old_inactive_orders(); в functions.php и обновите сайт
  • Проверьте, что заказы удалились
  • Убедитесь, что файлы логов содержат сообщение о количестве удаленных заказов
  • После этого удалите ручной вызов, чтобы не запускать функцию лишний раз

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

  • Заказы не удаляются: Проверьте, что WooCommerce активен и функция wc_get_orders доступна. Возможно, у вас неверно указаны статусы заказов. Используйте точные идентификаторы статусов из WooCommerce (например, pending, cancelled, failed).
  • Планировщик не срабатывает: WP-Cron зависит от посещений сайта. Для надежной работы настроьте системный cron или используйте плагин WP Crontrol для диагностики и запуска задач вручную.
  • Удаляются нужные заказы: Убедитесь, что период хранения и статусы настроены правильно, чтобы не потерять актуальные заказы.

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

  • Удаление заказов с помощью wp_delete_post с параметром true удаляет запись из базы полностью. Убедитесь в необходимости полного удаления, иначе используйте мягкое удаление.
  • Не запускайте удаление слишком часто, оптимально — раз в сутки.
  • Для крупных магазинов с тысячами заказов добавляйте пагинацию в запросы, чтобы не перегрузить сервер.
  • Резервное копирование базы перед автоматическим удалением — обязательно.

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

МетодПлюсыМинусыРекомендации
Плагин типа WP Bulk DeleteПростой интерфейс, настройка без кодаМожет нагружать сайт, платные функцииПодходит для небольших магазинов
Код с WP-Cron (как в статье)Гибкость, автоматизация, бесплатностьТребует базовых навыков PHP, настройка кронОптимальный вариант для разработчиков
Удаление через SQL-запросыОчень быстроРиск повредить данные, требует бэкапаИспользовать только опытным администраторам
Как автоматически создать настройку с большим выбором в WordPress
20.03.2026
Автоматическое создание и отправка email-рассылок в WordPress с помощью WP Robot
05.01.2026
Как автоматически создавать уникальные изображения для постов в WordPress
06.04.2026
Автоматическое возврат средств по устаревшим заказам в WooCommerce: настройка и проверка
13.06.2026
Как автоматически отключить неиспользуемые скрипты и стили в WordPress
19.05.2026