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

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

В WooCommerce просроченные (заброшенные) заказы, например со статусом pending или failed, со временем накапливаются и занимают место в базе данных. Это замедляет работу сайта и усложняет управление заказами. Автоматическое удаление таких заказов помогает поддерживать базу в чистоте, но важно учитывать, что удаление должно быть безопасным и не привести к потере нужных данных.

Как проверить наличие просроченных заказов

Чтобы оценить проблему, выполните SQL-запрос через phpMyAdmin или WP CLI:

SELECT ID, post_date, post_status FROM wp_posts WHERE post_type = 'shop_order' AND post_status IN ('wc-pending', 'wc-failed') ORDER BY post_date ASC;

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

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

1. Определяем критерии удаления

  • Статус заказа: wc-pending, wc-failed
  • Возраст заказа: старше 7 дней (можно настроить)

2. Создаем функцию удаления

Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

function wpdemo_delete_expired_orders() {
    $args = array(
        'status' => array('pending', 'failed'),
        'date_created' => '<' . ( time() - 7 * DAY_IN_SECONDS ),
        'limit' => -1,
        'return' => 'ids',
    );

    $orders = wc_get_orders( $args );

    if ( empty( $orders ) ) {
        return 'No expired orders found.';
    }

    foreach ( $orders as $order_id ) {
        $order = wc_get_order( $order_id );
        if ( $order ) {
            $order->delete( true ); // true — удалить навсегда
        }
    }

    return count( $orders ) . ' expired orders deleted.';
}

3. Создаем консольную команду для ручного вызова с подтверждением

Если на сайте есть WP-CLI, добавьте команду для безопасного запуска:

if ( defined('WP_CLI') && WP_CLI ) {
    WP_CLI::add_command('wpdemo-delete-orders', function() {
        WP_CLI::confirm('Вы уверены, что хотите удалить все просроченные заказы?');
        $result = wpdemo_delete_expired_orders();
        WP_CLI::success($result);
    });
}

4. Настраиваем автоматический запуск через WP-Cron

Добавьте задачу для ежедневного удаления (например, в 3:00 ночи):

function wpdemo_schedule_order_cleanup() {
    if ( ! wp_next_scheduled( 'wpdemo_cleanup_expired_orders_hook' ) ) {
        wp_schedule_event( strtotime('03:00:00'), 'daily', 'wpdemo_cleanup_expired_orders_hook' );
    }
}
add_action( 'wp', 'wpdemo_schedule_order_cleanup' );

add_action( 'wpdemo_cleanup_expired_orders_hook', 'wpdemo_delete_expired_orders' );

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

  • Запустите команду в WP-CLI:
    wp wpdemo-delete-orders
    Вы увидите запрос подтверждения и сообщение об удалении.
  • Проверьте базу данных на наличие просроченных заказов через SQL-запрос (см. выше).
  • Просмотрите логи WP-Cron, чтобы убедиться, что запланированная задача выполняется.

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

  • Удаление не происходит: проверьте, активен ли WP-Cron на сайте или запускайте cron вручную через сервер.
  • Удаляются нужные заказы: убедитесь, что критерии выбора заказов корректны (проверьте статус и дату).
  • Ошибка при удалении из-за зависимостей: используйте метод $order->delete(true) для принудительного удаления.
  • Команда WP-CLI не работает: проверьте, установлен ли WP-CLI и доступна ли команда на сервере.

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

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

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

МетодПлюсыМинусыПрименимость
Ручное удаление через WP-CLIПолный контроль, подтверждение действийТребует доступа к серверу и знания WP-CLIСредние и крупные сайты
Автоматический WP-Cron скриптАвтоматизация, регулярное очищениеЗависит от стабильности WP-Cron, риск удаления без подтвержденияМалые и средние сайты с надежным WP-Cron
Плагины очистки заказовПростота настройки, интерфейсДополнительная нагрузка, возможные конфликтыНачинающие пользователи
Как автоматизировать очистку кеша в WordPress
16.03.2026
Как использовать WPRemark для автоматического ответа на комментарии WordPress
08.02.2026
Как добавить свои свойства в метаданные постов WordPress
11.11.2025
Как использовать WPCommunity для создания форума на WordPress
27.02.2026
Как настроить автозаполнение форм в WordPress с помощью AJAX
16.04.2026