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

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

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

Как удалить старые заказы WooCommerce автоматически

Используем WP-Cron и WP_Query для выборки заказов

Для автоматического удаления заказов по дате понадобится скрипт, который периодически будет запускаться через WP-Cron, искать заказы старше указанной даты и удалять их. Ниже — пример рабочей функции.

function wplog_delete_old_wc_orders() {
    if ( ! class_exists( 'WC_Order_Query' ) ) return;

    $date_threshold = date( 'Y-m-d H:i:s', strtotime( '-180 days' ) ); // удалить заказы старше 180 дней

    $args = array(
        'limit'        => -1,
        'type'         => 'shop_order',
        'status'       => array('completed', 'cancelled', 'refunded'), // выбираем статусы
        'date_created' => '<' . $date_threshold,
        'return'       => 'ids',
    );

    $orders = wc_get_orders( $args );

    if ( empty( $orders ) ) return;

    foreach ( $orders as $order_id ) {
        wp_delete_post( $order_id, true ); // принудительно удаляем заказ
    }
}

// Добавляем задачу в WP-Cron
function wplog_schedule_old_order_cleanup() {
    if ( ! wp_next_scheduled( 'wplog_delete_old_wc_orders_hook' ) ) {
        wp_schedule_event( time(), 'daily', 'wplog_delete_old_wc_orders_hook' );
    }
}
add_action( 'wp', 'wplog_schedule_old_order_cleanup' );
add_action( 'wplog_delete_old_wc_orders_hook', 'wplog_delete_old_wc_orders' );

Описание кода

  • Через wc_get_orders выбираем все заказы старше 180 дней с определёнными статусами.
  • Используем wp_delete_post с параметром true для принудительного удаления заказов из базы.
  • Создаём ежедневное задание WP-Cron для автоматического запуска очистки.

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

  • В админке WooCommerce зайдите в раздел «Заказы» и проверьте наличие старых заказов старше 180 дней.
  • Запустите задачу вручную через WP-CLI: wp cron event run wplog_delete_old_wc_orders_hook, если доступно.
  • Проверьте, что заказы действительно удалились из базы.
  • Просмотрите логи сервера или добавьте логирование в функцию для отслеживания удалённых заказов.

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

  • Заказы не удаляются: Проверьте, активирован ли WP-Cron и работает ли хук wplog_delete_old_wc_orders_hook. Также убедитесь, что у пользователя, под которым запускается скрипт, есть права на удаление заказов.
  • Удаляются не те заказы: Проверьте правильность фильтра date_created и статусов в аргументах wc_get_orders.
  • WP-Cron не запускается регулярно: На некоторых хостингах WP-Cron работает только при посещении сайта. Рекомендуется настроить системный CRON для вызова wp-cron.php.
  • Удаление занимает много времени: Если заказов много, уменьшите лимит и делайте удаление партиями с использованием транзиентов или transient API для отслеживания прогресса.

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

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

Сравнение способов автоматического удаления заказов WooCommerce

МетодПлюсыМинусы
Кастомный код с WP-CronГибкость, полный контроль, бесплатноНужно писать и тестировать код, возможны ошибки
Плагины для очистки базыПростота использования, готовые функцииМогут удалять лишнее, нагрузка на сайт, часто платные
Ручное удаление через админкуПростота, нет риска ошибок кодаНе подходит для больших объёмов, требует времени
Использование WP-Cron для автоматического обновления статусов возвратов в WooCommerce
07.07.2026
Как автоматически изменять заголовок постов в WordPress с помощью кода
04.04.2026
Удаление изображений из библиотеки медиа WordPress по дате
22.02.2026
Как оптимизировать загрузку WordPress без плагинов
24.11.2025
Как удалить пустые категории в WordPress
24.03.2026