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

Диагностика проблемы с неактивными заказами в WooCommerce

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

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

1. Выбор статусов заказов для удаления

Определите, какие статусы заказов считать неактивными. Обычно это pending (ожидает оплаты), failed (неудачные) и cancelled (отменённые).

2. Настройка WP-Cron для регулярного запуска удаления

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

3. Реализация функции удаления

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

function wc_delete_old_inactive_orders() {
    $statuses = array('pending', 'failed', 'cancelled');
    $days_to_keep = 7; // удалить заказы старше 7 дней
    
    $date_query = array(
        'column' => 'post_date',
        'before' => date('Y-m-d H:i:s', strtotime("- $days_to_keep days")),
        'inclusive' => true,
    );

    $args = array(
        'post_type'      => 'shop_order',
        'post_status'    => $statuses,
        'date_query'     => array($date_query),
        '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 — без сохранения в корзине
        }
    }
}

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

// Хук для запуска функции
add_action('wc_delete_old_inactive_orders_hook', 'wc_delete_old_inactive_orders');

4. Удаление WP-Cron задачи при деактивации плагина

Чтобы не оставлять мусор, удалите расписание при остановке кода:

function wc_remove_schedule() {
    $timestamp = wp_next_scheduled('wc_delete_old_inactive_orders_hook');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wc_delete_old_inactive_orders_hook');
    }
}
register_deactivation_hook(__FILE__, 'wc_remove_schedule');

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

  • Перейдите в список заказов в админке WooCommerce и отфильтруйте по статусам pending, failed, cancelled.
  • Проверьте, что заказы старше 7 дней исчезли после запуска cron (можно запустить cron вручную через WP-CLI: wp cron event run wc_delete_old_inactive_orders_hook).
  • Проверяйте логи ошибок PHP для возможных проблем при удалении.

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

  • Заказы не удаляются: проверьте, что cron-событие запланировано с помощью wp cron event list или плагинов типа WP Crontrol.
  • Удаляются не те заказы: убедитесь, что в массиве $statuses указаны нужные статусы, и таймзона сервера совпадает с настройками WordPress.
  • Удаление занимает много времени: при большом количестве заказов добавьте постраничную обработку, например, по 50 заказов за раз.
  • Удаление не полностью очищает базу: WP-Cron удаляет только посты, проверьте, нет ли плагинов, которые сохраняют связанные метаданные в других таблицах.

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

  • Запускайте очистку в ночное время, чтобы не создавать нагрузку в пиковые часы.
  • Резервируйте базу данных перед запуском автоматического удаления.
  • Используйте wp_delete_post с параметром true, чтобы удалять заказы без возможности восстановления из корзины.
  • Для больших магазинов рекомендуем разделить удаление на несколько шагов с использованием offset и limit.
  • Если ваш хостинг не поддерживает WP-Cron, настройте системный cron для вызова wp cron event run.

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

МетодПлюсыМинусыПример использования
Ручное удаление из админки Простота, не требует кода Трудозатратно при большом количестве заказов Админка WooCommerce → Заказы → Фильтр → Удалить
Код с WP-Cron (описанный выше) Автоматизация, гибкая настройка Нужно понимать WP-Cron, возможна нагрузка functions.php или плагин с приведённым кодом
Плагины очистки базы Удобный интерфейс, дополнительные функции Могут нагружать сайт, не всегда бесплатны Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpteam.ru&utm_medium=article&utm_campaign=woocommerce-avtomaticheskoe-udaleniye-neaktivnyh-zakazov-po-srokam)
WooCommerce: автоматическое удаление неоплаченных заказов с помощью кода
22.06.2026
Как автоматизировать удаление старого контента в WordPress с помощью WP-Cron и кода
16.02.2026
Как автоматизировать удаление старого контента в WordPress с помощью WP-Cron и кода
21.03.2026
WooCommerce: как удалить варианты товаров на основе атрибутов
26.04.2026
Как создать автоматическое отправление email в WordPress с помощью WP-Cron
11.02.2026

Возникли задачи по WP? Вы можете задать свой вопрос на FAQwp.com Либо обратиться к специалистам поддержки.