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

Почему важно удалять несоверешённые заказы в WooCommerce

В WooCommerce несоверешённые заказы (статусы pending, failed или on-hold) могут накапливаться, занимая место в базе данных и замедляя работу магазина. Особенно это актуально для магазинов с большим трафиком и частыми брошенными корзинами. Автоматическое удаление таких заказов помогает поддерживать базу в чистоте и повышать производительность.

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

Для начала проверьте, сколько заказов с неподтвержденным статусом накопилось в базе. Это можно сделать через phpMyAdmin или WP-CLI:

wp db query "SELECT post_status, COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' GROUP BY post_status;"

Если в статусах wc-pending, wc-failed или wc-on-hold тысячи записей, это сигнал к очистке.

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

1. Создаем функцию для удаления заказов старше заданного времени

function wpabout_delete_old_uncompleted_orders() {
    global $wpdb;
    $interval = 7; // количество дней
    $statuses = ['wc-pending', 'wc-failed', 'wc-on-hold'];

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

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

2. Запускаем функцию по расписанию через WP-Cron

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

add_action('wpabout_order_cleanup_hook', 'wpabout_delete_old_uncompleted_orders');

3. Отключение планировщика (если понадобится)

function wpabout_clear_order_cleanup_schedule() {
    $timestamp = wp_next_scheduled('wpabout_order_cleanup_hook');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpabout_order_cleanup_hook');
    }
}

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

  • Подождите 24 часа или запустите событие вручную через WP-CLI: wp cron event run wpabout_order_cleanup_hook
  • Проверьте количество заказов с нужными статусами в админке WooCommerce или через запрос в базу (см. диагностику)
  • Убедитесь, что заказы старше 7 дней действительно удалены

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

  • Заказы не удаляются: проверьте, активен ли WP-Cron и работает ли расписание (wp cron event list).
  • Удаляются не те заказы: проверьте условие даты в wc_get_orders, используйте правильный формат даты (объект DateTime или 'Y-m-d H:i:s').
  • Проблемы с правами: убедитесь, что функция вызывается с необходимыми правами, и что wp_delete_post не блокируется плагинами безопасности.
  • Перегрузка базы при большом количестве заказов: разбейте удаление на порции по 50-100 заказов за один запуск.

Чек-лист для внедрения автоматической очистки заказов

  1. Определите статусы заказов для удаления и период хранения
  2. Напишите функцию удаления заказов с проверкой даты
  3. Настройте WP-Cron для периодического запуска
  4. Проверьте работу крона и корректность удаления
  5. Оптимизируйте код для больших баз (пакетная обработка)
  6. Резервируйте базу перед внедрением

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

  • Обязательно выполняйте резервное копирование базы перед автоматическим удалением.
  • Используйте пакетную обработку, если заказов слишком много, чтобы избежать таймаутов.
  • Контролируйте работу WP-Cron, особенно на хостингах с отключённым системным cron.
  • Можно расширить функционал через Clearfy Pro для очистки и оптимизации базы данных https://wpshop.ru/plugins/clearfy.

Таблица сравнения способов удаления несоверешённых заказов

МетодПлюсыМинусыИспользование
Ручное удаление через админкуПростота, контрольТрудозатратно, риск пропускаМалые магазины
WP-Cron + скрипт (код)Автоматизация, гибкостьНужна настройка, возможны ошибкиСредние и крупные магазины
Плагины очистки (например, Clearfy)Удобство, комплексная оптимизацияМожет быть платным, влияние на производительностьВсе уровни
Как удалить и решить проблему загрузки библиотек jQuery в WordPress
15.09.2026
Как использовать WP-Cron для автоматизации задач в WordPress
16.09.2026
Как использовать WPRemark для автоматического удаления спама в комментариях WordPress
15.09.2026
Автоматическое удаление старых изображений в WordPress
03.10.2026
Как установить приватный режим для страниц WordPress
28.09.2026