Как автоматически очистить WooCommerce от незаконченных заказов

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

В WooCommerce накопление незаконченных заказов (статусы "Ожидает оплаты", "В обработке" без оплаты) приводит к увеличению нагрузки на базу данных и снижению производительности сайта. Особенно заметно это на крупных магазинах с большим трафиком и объемом заказов.

Чтобы определить, есть ли проблема, выполните SQL-запрос к базе данных:

SELECT COUNT(ID) as count, post_status FROM wp_posts WHERE post_type = 'shop_order' GROUP BY post_status;

Обратите внимание на количество заказов со статусом wc-pending и wc-on-hold. Если их слишком много (сотни и тысячи), необходимо автоматизировать их удаление или архивирование.

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

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

Например, удалять заказы со статусом wc-pending, созданные более 2 дней назад.

function wpstandart_clear_old_pending_orders() {
    $args = [
        'post_type'   => 'shop_order',
        'post_status' => 'wc-pending',
        'date_query'  => [
            [
                'before' => '2 days ago'
            ]
        ],
        'fields'      => 'ids',
        'nopaging'    => true,
    ];

    $orders = get_posts($args);

    if (!empty($orders)) {
        foreach ($orders as $order_id) {
            wp_delete_post($order_id, true); // Удаляем навсегда
        }
    }
}

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

Добавьте в functions.php регистрацию расписания и запуск функции:

if (!wp_next_scheduled('wpstandart_daily_clear_pending_orders')) {
    wp_schedule_event(time(), 'daily', 'wpstandart_daily_clear_pending_orders');
}

add_action('wpstandart_daily_clear_pending_orders', 'wpstandart_clear_old_pending_orders');

Это запустит очистку один раз в сутки. При необходимости можно менять интервал (например, 'hourly').

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

Для подтверждения результата:

  • Выполните SQL-запрос из раздела диагностики SELECT COUNT(ID) as count FROM wp_posts WHERE post_type = 'shop_order' AND post_status = 'wc-pending'; до и после запуска WP-Cron.
  • Проверьте наличие ошибок в логах сервера и WooCommerce.
  • Убедитесь, что не удаляются заказы с другими статусами или действительные оплаченные заказы.

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

  • Функция не вызывается автоматически: проверьте, активен ли WP-Cron на вашем сайте (например, отключен ли в wp-config.php параметр DISABLE_WP_CRON), и нет ли ошибок в логах.
  • Удаляются нужные заказы: убедитесь, что в аргументах post_status указан только нужный статус (обычно wc-pending), и дата фильтрации корректна.
  • Слишком частый запуск: если установлено слишком частое расписание, это может нагрузить сервер. Лучше ограничить до одного раза в сутки.

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

  • Перед удалением заказов создавайте резервные копии базы данных.
  • Если база очень большая, делайте удаление по частям (порциями), чтобы избежать таймаута.
  • Для крупных магазинов рассмотрите возможность архивирования заказов вместо удаления.
  • Используйте плагин Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpstandart.ru&utm_medium=article&utm_campaign=kak-avtomaticheski-ochistit-woocommerce-ot-nezakonchennyh-zakazov) для дополнительной оптимизации и очистки базы.

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

МетодПлюсыМинусы
Ручное удаление через админку WooCommerceПростота, контрольТрудозатратно, не автоматично
WP-Cron + кастомный код (как в статье)Автоматизация, гибкостьТребует навыков, возможны ошибки
Плагин Clearfy ProГотовое решение, дополнительные функции оптимизацииПлатный, может быть избыточным
Как создать автоматический импорт данных из Google Sheets в WordPress
06.02.2026
Как создать настройку очистки кеша в WordPress с примером кода
22.02.2026
Как создать многоуровневую навигацию в WordPress с примерами
04.04.2026
Как использовать хук WooCommerce checkout_update_order_meta для добавления данных к заказу
29.04.2026
Как автоматизировать раскладку контента в WordPress
30.01.2026