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

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

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

Чтобы понять масштаб проблемы, перейдите в админку WooCommerce, в раздел «Заказы» и отфильтруйте по статусам «Ожидает оплаты» или «Неудачные». Если таких заказов сотни или тысячи, необходимо автоматизировать их удаление.

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

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

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

function wplog_delete_old_unpaid_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(
            array(
                'column' => 'post_date',
                'before' => $date,
            ),
        ),
        'posts_per_page' => -1,
        'fields'         => 'ids',
        'no_found_rows'  => true,
    );

    $orders = get_posts($args);

    foreach ($orders as $order_id) {
        wp_delete_post($order_id, true); // Полное удаление
    }
}

2. Автоматический запуск функции по расписанию с помощью WP-Cron

Добавьте запуск функции раз в сутки, чтобы выполнять очистку автоматически:

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

add_action('wplog_daily_delete_unpaid_orders', 'wplog_delete_old_unpaid_orders');

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

  • Перейдите в раздел «Заказы» WooCommerce и проверьте наличие старых заказов со статусом pending или failed.
  • После выполнения cron-задачи заказы старше 7 дней должны исчезнуть.
  • Для ручного тестирования запустите функцию вручную через WP-CLI или прямо в коде:
wplog_delete_old_unpaid_orders();

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

  • Неправильный формат даты в date_query: Убедитесь, что дата создаётся через date('Y-m-d H:i:s'). Ошибки в формате приведут к неправильному выбору заказов.
  • Функция не вызывается по расписанию: Проверьте, что WP-Cron работает корректно. Для теста вызовите cron вручную через WP-CLI или плагин WP Crontrol.
  • Заказы не удаляются: Убедитесь, что вызывается wp_delete_post($order_id, true) с параметром true для полного удаления, иначе заказ попадёт в корзину.
  • Потеря данных критична: Рекомендуется сделать резервную копию базы перед внедрением кода.

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

  • Ограничивайте число удаляемых записей в одном запуске, если у вас очень много заказов, чтобы избежать превышения лимитов памяти. Например, добавьте параметр 'posts_per_page' => 100 и запускайте несколько итераций.
  • Для повышения безопасности ограничьте доступ к функциям удаления, если их вызываете вручную через админку или WP-CLI.
  • Используйте плагин Clearfy Pro для дополнительной оптимизации WooCommerce и очистки базы данных — он умеет автоматически удалять ненужные данные и ускоряет работу сайта.

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

МетодПреимуществаНедостатки
Ручное удаление через админкуПростота, не требует кодаТрудозатратно при большом количестве заказов
WP-Cron с пользовательским кодомАвтоматизация, гибкость настроекЗависимость от работы WP-Cron, требует навыков
Плагины оптимизации (Clearfy Pro)Дополнительные функции, удобствоПлатные решения, возможная нагрузка
Автоматическое отключение комментариев на старых публикациях WordPress
14.02.2026
Как изменить главный заголовок страницы в WordPress без плагинов
20.12.2025
Как использовать WP-Cron для автоматического очищения кеша и оптимизации базы данных WordPress
29.05.2026
Как использовать WP-Cron для автоматизации задач в WordPress
22.04.2026
Внутренняя переадресация в WordPress: как сделать без плагинов
03.12.2025