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

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

На больших магазинах WooCommerce часто накапливаются заказы в статусе pending или failed — клиенты начали оформление, но не завершили оплату. Это создает нагрузку на базу данных и затрудняет управление заказами.

Проверить количество таких заказов можно через SQL-запрос напрямую в базе данных или с помощью плагина для админки, например WP phpMyAdmin:

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

Если число превышает несколько сотен, стоит автоматизировать очистку.

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

1. Определяем критерии очистки

Рекомендуется удалять заказы со статусом pending или failed, которые старше N дней (например, 7 дней).

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

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

function wc_delete_old_inactive_orders() {
    $days = 7; // количество дней
    $date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
    
    // Получаем заказы с нужным статусом и датой
    $args = array(
        'post_type'      => 'shop_order',
        'post_status'    => array('wc-pending', 'wc-failed'),
        'date_query'     => array(
            'before' => $date,
        ),
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );
    
    $orders = get_posts($args);
    if (!empty($orders)) {
        foreach ($orders as $order_id) {
            wp_delete_post($order_id, true); // true - удаление без возможности восстановления
        }
    }
}

3. Настраиваем регулярное выполнение через WP-Cron

Добавьте регистрацию события при инициализации WordPress:

function wc_schedule_old_orders_cleanup() {
    if (!wp_next_scheduled('wc_delete_old_inactive_orders_hook')) {
        wp_schedule_event(time(), 'daily', 'wc_delete_old_inactive_orders_hook');
    }
}
add_action('wp', 'wc_schedule_old_orders_cleanup');

add_action('wc_delete_old_inactive_orders_hook', 'wc_delete_old_inactive_orders');

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

  • Подождите выполнение задачи (обычно в полночь по серверному времени).
  • Проверьте базу данных или через админку WooCommerce на количество заказов в статусах pending и failed.
  • Для ручного теста вызовите функцию напрямую:
wc_delete_old_inactive_orders();

И проверьте, что устаревшие заказы удалились.

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

  • Функция не запускается автоматически. Проверьте, что WP-Cron работает (проверьте системный cron или посетите сайт, чтобы WP-Cron инициировался).
  • Удаляются не те заказы. Убедитесь, что правильно указаны статусы и дата в запросе get_posts.
  • Удаление не полное. Используйте wp_delete_post($order_id, true) для полного удаления, иначе заказ может попасть в корзину удаленных.
  • Ошибка превышения лимитов. При большом количестве заказов разбейте удаление на партии по 50-100 заказов за раз, используя пагинацию.

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

  • Создайте резервную копию базы перед внедрением автоматического удаления.
  • Ограничьте удаление заказов только статусами pending и failed, не трогая processing и completed.
  • Используйте WP-Cron с интервалом не чаще 1 раза в сутки, чтобы не нагружать сервер.
  • Для больших магазинов оптимизируйте SQL-запросы и используйте индексы по дате и статусу.
  • Регулярно мониторьте логи ошибок и количество удаленных заказов.

Сравнение вариантов автоматической очистки заказов

МетодПлюсыМинусыКомпромисс
Ручное удаление через админку WooCommerceПростота, не требует кодаТрудоемко при большом количестве заказовПодходит для небольших магазинов
Плагин для очистки заказов (например WP Bulk Delete)Графический интерфейс, настройка условийЗависимость от стороннего ПО, возможно влияние на производительностьДля средних магазинов, требует тестирования
Кастомный код с WP-Cron (как в статье)Максимальный контроль, интеграция в тему/плагинТребует навыков программирования, ответственность за стабильностьОптимальный вариант для крупных проектов
Как создать свой плагин WordPress: пошаговое руководство
10.11.2025
Как создать подключение к внешнему API в WordPress: практическое руководство
01.03.2026
Как автоматически редактировать изображения при загрузке в WordPress
16.03.2026
Как использовать AJAX в WordPress для динамического обновления контента
03.12.2025
Как правильно оптимизировать шаблоны WordPress для быстрой загрузки
25.12.2025