Автоматическое удаление старых заказов в WooCommerce: как настроить и проверить

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

При работе интернет-магазина на WooCommerce со временем база данных увеличивается за счёт большого количества заказов, в том числе уже выполненных и архивных. Это замедляет работу сайта, увеличивает время резервного копирования и усложняет администрирование. Чтобы избежать этих проблем, полезно настроить автоматическое удаление старых заказов, которые уже не актуальны.

Как определить, что нужно удалять

  • Заказы со статусом completed или cancelled старше 6 месяцев или другого срока, подходящего бизнесу.
  • Заказы со статусом failed или pending, которые не были оплачены и не менялись долгое время.

Вы можете проверить количество таких заказов через SQL-запрос в базе данных или через WP-CLI:

wp post list --post_type=shop_order --post_status=completed --field=ID --date_query_column=post_date --date_query_after='6 months ago' | wc -l

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

WooCommerce не предлагает встроенной функции для автоматического удаления заказов, поэтому лучший вариант — создать пользовательский скрипт и запускать его по cron.

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

function wc_delete_old_orders( $days = 180 ) {
    $args = array(
        'post_type'      => 'shop_order',
        'post_status'    => array('wc-completed', 'wc-cancelled'),
        'date_query'     => array(
            array(
                'column' => 'post_date',
                'before' => "$days days ago",
            ),
        ),
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );

    $old_orders = get_posts( $args );

    foreach ( $old_orders as $order_id ) {
        wp_delete_post( $order_id, true ); // true — удаляем без возможности восстановления
    }

    return count( $old_orders );
}

2. Добавляем cron-задачу для ежемесячного запуска удаления

add_action( 'wp_loaded', 'wc_schedule_old_orders_deletion' );
function wc_schedule_old_orders_deletion() {
    if ( ! wp_next_scheduled( 'wc_delete_old_orders_cron_hook' ) ) {
        wp_schedule_event( time(), 'monthly', 'wc_delete_old_orders_cron_hook' );
    }
}

add_action( 'wc_delete_old_orders_cron_hook', 'wc_cron_delete_old_orders' );
function wc_cron_delete_old_orders() {
    $deleted_count = wc_delete_old_orders( 180 );
    error_log( "WooCommerce: удалено заказов старше 180 дней - $deleted_count" );
}

3. Как запустить вручную для проверки

Временно вызовите функцию в functions.php или через WP-CLI для теста:

echo 'Удалено заказов: ' . wc_delete_old_orders(30); // удаляем заказы старше 30 дней

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

Чтобы убедиться, что автоматическое удаление работает:

  • Проверьте логи PHP на наличие строки с количеством удалённых заказов.
  • Просмотрите список заказов в админке WooCommerce — число старых заказов должно уменьшиться.
  • Запустите вручную функцию с меньшим значением дней, чтобы проверить удаление.

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

  • Заказы не удаляются: проверьте, что cron-задание зарегистрировано (wp cron event list). Возможно, нужно запустить wp cron manually или настроить системный cron.
  • Удаляются не те заказы: проверьте правильность статусов заказов в массиве post_status. WooCommerce использует статус с префиксом wc-.
  • Производительность падает при удалении: если заказов много, удаляйте пачками (пагинация) или делайте паузы между запросами.

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

  • Удаляйте заказы только после полного анализа, чтобы не потерять важные данные для бухгалтерии.
  • Резервное копирование базы перед запуском удаления обязательно.
  • Используйте wp_delete_post с параметром $force_delete = true, чтобы полностью убрать запись, иначе заказ попадёт в корзину.
  • Для больших магазинов используйте WP-CLI скрипты с пагинацией и ограничением количества удаляемых заказов за один запуск.

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

МетодПреимуществаНедостатки
Ручное удаление через админкуПросто, не требует кодаТрудоёмко при большом объёме заказов
Код с cron-задачей (описанный способ)Автоматизация, гибкость, контрольНужны базовые навыки программирования
Плагины для очистки заказовУдобный интерфейс, дополнительные опцииРиск несовместимости, нагрузка на сайт
Оптимизация базы данных WordPress: удаляем повторяющиеся записи
12.12.2025
Как автоматически удалять старые чёрные спам-комментарии в WordPress
04.04.2026
Как удалить пустые категории в WordPress с помощью кода
27.03.2026
Как удалить неиспользуемые таксономии в WordPress
22.02.2026
Как использовать хуки в WordPress для расширения функциональности
19.11.2025