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

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

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

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

1. Определение критериев удаления

Для удаления рекомендуем брать заказы со статусами cancelled, failed и pending, которые не изменялись более 30 дней. Такой срок можно настроить под свои нужды.

2. Создание PHP-функции для удаления заказов

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

function wpkit_delete_inactive_woocommerce_orders() {
    if ( ! class_exists( 'WC_Order_Query' ) ) {
        return;
    }

    $args = array(
        'limit' => -1,
        'status' => array('cancelled', 'failed', 'pending'),
        'date_modified' => '<' . ( time() - 30 * DAY_IN_SECONDS ),
        'return' => 'ids',
    );

    $orders = wc_get_orders( $args );

    if ( empty( $orders ) ) {
        return;
    }

    foreach ( $orders as $order_id ) {
        wp_delete_post( $order_id, true );
    }
}

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

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

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

add_action( 'wpkit_daily_delete_inactive_orders', 'wpkit_delete_inactive_woocommerce_orders' );

4. Очистка запланированных задач при деактивации

Если вы используете кастомный плагин, не забудьте удалить задачу при деактивации:

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

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

  • Запустите функцию вручную для теста: wpkit_delete_inactive_woocommerce_orders() через WP-CLI или временно вызовите в админке.
  • Проверьте, что заказы с нужными статусами и датой удаления исчезли из базы данных (таблица wp_posts с типом shop_order).
  • Убедитесь, что задачи WP-Cron выполняются, проверив лог или плагин WP Crontrol.

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

  • Заказы не удаляются: проверьте, что WooCommerce активен и класс WC_Order_Query доступен.
  • WP-Cron не запускается автоматически: на некоторых хостингах WP-Cron требует ручного запуска через серверный cron или WP-CLI.
  • Удаляются нужные заказы: внимательно проверьте фильтры даты и статуса, чтобы не потерять важные заказы.
  • Высокая нагрузка при удалении большого числа заказов: добавьте лимит на количество удаляемых заказов за один запуск и планируйте частые запуски.

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

  • Всегда делайте резервные копии базы данных перед внедрением автоматического удаления.
  • Используйте транзакции или проверки, если удаляете заказы, связанные с платежами или отчетами.
  • Для масштабных магазинов лучше запускать удаление партиями (например, по 50 заказов за раз), чтобы снизить нагрузку.
  • Проверяйте логи и используйте WP-CLI для безопасного ручного управления заказами.

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

МетодПлюсыМинусыРекомендации
Ручное удаление через админкуПростота, контрольТрудоемко, не подходит для большого объемаИспользовать для единичных случаев
Плагины очистки базыАвтоматизация, удобствоМожет удалять лишнее, нагрузкаВыбирать проверенные решения, например Clearfy Pro ссылка
Кастомный код с WP-CronГибкость, контроль, минимальная нагрузкаТребует навыков программированияЛучший выбор для опытных разработчиков
Как создать автоматический импорт из внешнего источника с обработкой ошибок в WordPress
17.04.2026
WooCommerce: как исключить товары с определёнными атрибутами из корзины
04.05.2026
WooCommerce: автоматическое изменение стоимости товаров при оплате с поддержкой купонов
26.05.2026
Как создать свой шорткод для WordPress
27.11.2025
Как сделать автотестирование плагинов WordPress на PHP
21.12.2025