wppartner.ru wordpress WP Partner

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

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

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

Для начала определите, есть ли проблема с "засорением" заказов:

  • Перейдите в WooCommerce > Заказы и отфильтруйте заказы по статусу, например, "ожидание оплаты".
  • Посмотрите, сколько заказов в таких статусах старше 30 дней.
  • Оцените, насколько это влияет на скорость загрузки страниц админки и запросов к базе.

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

Самый надёжный способ — написать кастомный PHP-скрипт, который будет удалять заказы с определёнными статусами и старше заданного срока. Для автоматизации используйте wp-cron.

Шаг 1. Создание функции удаления заказов

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

    // Параметры: заказы со статусом 'pending' или 'failed', старше 30 дней
    $args = array(
        'limit' => -1,
        'status' => array('pending', 'failed'),
        'date_created' => '<' . ( time() - 30 * DAY_IN_SECONDS ),
        'return' => 'ids',
    );

    $order_query = new WC_Order_Query( $args );
    $orders_to_delete = $order_query->get_orders();

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

    foreach ( $orders_to_delete as $order_id ) {
        wp_delete_post( $order_id, true ); // жёсткое удаление
    }
}

Шаг 2. Регистрация планировщика WP-Cron

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

add_action( 'wppartner_order_cleanup_event', 'wppartner_delete_old_inactive_orders' );

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

Это обеспечит ежедневный автоматический запуск очистки заказов.

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

  • В админке WooCommerce перейдите в раздел заказов и отфильтруйте статусы 'pending' и 'failed'.
  • Проверьте, что заказы старше 30 дней исчезли.
  • Для теста можно временно изменить период очистки в коде на 1 день (заменить 30 на 1) и создать тестовые заказы с нужным статусом.
  • Проверьте логи сервера на ошибки удаления, если они есть.

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

  • Заказы не удаляются: проверьте, что в WooCommerce подключен класс WC_Order_Query, и что хуки wp и wppartner_order_cleanup_event работают.
  • Удаляются нужные заказы: внимательно настройте фильтр по статусам и дате, чтобы исключить активные заказы.
  • Планировщик WP-Cron не запускается: на некоторых хостингах WP-Cron требует внешнего вызова. Проверьте с помощью плагина WP Crontrol.
  • Падение производительности при большом числе удалений: ограничьте количество удаляемых заказов за один запуск, например, 'limit' => 50, чтобы избежать тайм-аутов.

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

  • Используйте жёсткое удаление wp_delete_post(..., true) только если уверены, что данные не понадобятся для отчетов.
  • Перед удалением создавайте резервные копии базы данных.
  • Для крупных магазинов рассмотрите удаление по частям с использованием offset или пагинации.
  • Соблюдайте правильные права доступа к коду, чтобы исключить возможность несанкционированного запуска функции удаления.

Таблица сравнения способов удаления неактивных заказов

МетодПлюсыМинусыПример
Ручное удаление через админкуПростота, не требует кодаТрудоёмко, не подходит для больших объемовWooCommerce > Заказы
Кастомный скрипт + WP-CronАвтоматизация, гибкость настроекТребует навыков PHP, возможны ошибки без тестированияКод из статьи
Плагины очистки базы (например, Clearfy Pro)Простота, дополнительные функции оптимизацииЗависимость от стороннего ПО, возможные конфликтыClearfy Pro
×
Делай сайт лучше!!

-20% на премиум темы и плагины

Использовать скидку ⋙