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

Проблема: накопление отмененных заказов в WooCommerce

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

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

Чтобы проверить, есть ли у вас проблема с отмененными заказами, выполните следующие шаги:

  • Зайдите в админку WooCommerce → Заказы.
  • Отфильтруйте заказы по статусу Отменено.
  • Посмотрите количество таких заказов и дату их создания.

Если таких заказов сотни или тысячи, и они не нужны для отчетности, можно настроить их автоматическое удаление.

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

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

function wpb_delete_old_cancelled_orders() {
    $days = 30; // удалять отмененные заказы старше 30 дней
    $date = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $args = array(
        'status' => 'cancelled',
        'date_created' => '<' . $date,
        'limit' => -1,
        'return' => 'ids',
    );

    $orders = wc_get_orders($args);

    if (!empty($orders)) {
        foreach ($orders as $order_id) {
            wp_delete_post($order_id, true); // принудительное удаление
        }
    }
}

2. Добавляем задачу в WP-Cron для регулярного запуска

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

add_action('wpb_cleanup_cancelled_orders_hook', 'wpb_delete_old_cancelled_orders');

3. Опционально: удаляем задачу при деактивации плагина или темы

function wpb_clear_cancelled_orders_cron() {
    $timestamp = wp_next_scheduled('wpb_cleanup_cancelled_orders_hook');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpb_cleanup_cancelled_orders_hook');
    }
}
register_deactivation_hook(__FILE__, 'wpb_clear_cancelled_orders_cron');

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

  • Проверьте в админке количество отмененных заказов до запуска кода.
  • После того, как cron-задание выполнится (обычно в течение суток), снова отфильтруйте отмененные заказы. Заказы старше 30 дней должны исчезнуть.
  • Для тестирования можно уменьшить переменную $days до 1 и вручную запустить функцию wpb_delete_old_cancelled_orders() через админ-панель или WP-CLI.

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

  • Cron-задача не запускается: проверьте, включен ли WP-Cron на сайте. Для проверки в wp-config.php не должна быть прописана константа DISABLE_WP_CRON или она должна быть false. Если сайт на низкой посещаемости, cron может не запускаться, тогда настройте системный cron на сервере.
  • Заказы не удаляются: убедитесь, что статус заказа точно cancelled, а не, например, refunded или failed. Также проверьте права на удаление записей, код должен запускаться с правами администратора.
  • Удаление заказов приводит к потере данных: если вы используете интеграции или отчеты, которые требуют хранения отмененных заказов, автоматическое удаление не рекомендуется.

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

  • Перед внедрением автоматического удаления сделайте резервную копию базы данных, например, с помощью плагина UpdraftPlus или через хостинг.
  • Если база данных очень большая, ограничьте количество заказов, удаляемых за один запуск, добавив параметр limit (например, 100) и реализовав пакетную обработку.
  • Для контроля запланированных задач используйте плагин WP Crontrol, чтобы видеть расписание и вручную запускать задачи.
  • Если вы используете плагин Clearfy Pro от WPShop, в нем есть инструменты для оптимизации базы и очистки данных — это может помочь дополнительно разгрузить базу.

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

МетодПлюсыМинусы
Ручное удаление через админку WooCommerceПростота, не требует кодаТрудоемко при большом объеме заказов
Автоматическое удаление через WP-Cron и кодАвтоматизация, регулярность, не требует вмешательстваТребует навыков программирования, возможны ошибки при неправильных настройках
Использование плагинов очистки базы (например, Clearfy Pro)Удобный интерфейс, дополнительные функции оптимизацииПлатные опции, возможны конфликты с другими плагинами
WooCommerce: как автоматически удалять отменённые заказы и товары с нулевым остатком
07.06.2026
Как создать и использовать REST API эндпоинты в WordPress
26.12.2025
Оптимизация загрузки картинок в WordPress: практические методы
26.11.2025
WooCommerce: решение проблемы с неотсылкой писем после покупки
10.06.2026
WooCommerce: как автоматически удалять варианты товаров с нулевым остатком из корзины
04.05.2026