wpcat.ru wordpress WPCat.ru

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

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

В WooCommerce со временем накапливаются заказы с статусами, которые уже неактуальны, например, «отменённые» или «в ожидании оплаты» более месяца. Это замедляет работу сайта, усложняет управление и влияет на отчёты. Очистка таких заказов вручную неудобна и трудозатратна, поэтому автоматизация процесса — лучший выход.

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

Какие статусы и период учитывать

В первую очередь стоит определиться с критериями удаления. Обычно это статусы:

  • cancelled — отменённые;
  • failed — неудачные;
  • pending — ожидающие оплаты (старше 30 дней);
  • on-hold — в ожидании (старше 30 дней).

Задача — удалять заказы с этими статусами, которые не менялись больше 30 дней.

Пошаговое решение с примером кода

1. Добавим функцию, которая выбирает и удаляет устаревшие заказы.

2. Запустим её через WP-Cron один раз в сутки.

function wpcat_delete_old_woocommerce_orders() {
    if (!class_exists('WooCommerce')) {
        return;
    }
    $statuses = array('cancelled', 'failed', 'pending', 'on-hold');
    $days_old = 30;
    $date_before = date('Y-m-d H:i:s', strtotime('-' . $days_old . ' days'));

    $args = array(
        'limit' => -1,
        'status' => $statuses,
        'date_modified' => '<' . $date_before,
        'return' => 'ids',
    );

    $orders = wc_get_orders($args);
    foreach ($orders as $order_id) {
        wp_delete_post($order_id, true); // Полное удаление
    }
}

// Хук для ежедневного запуска
if (!wp_next_scheduled('wpcat_daily_delete_old_orders')) {
    wp_schedule_event(time(), 'daily', 'wpcat_daily_delete_old_orders');
}
add_action('wpcat_daily_delete_old_orders', 'wpcat_delete_old_woocommerce_orders');

Обратите внимание, что мы используем wc_get_orders с параметрами фильтрации по статусам и дате последнего изменения. Функция wp_delete_post с параметром true удаляет заказ без возможности восстановления.

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

Чтобы проверить работу скрипта:

  1. В админке WooCommerce откройте заказы с указанными статусами старше 30 дней. Можно подготовить тестовые заказы с нужными параметрами.
  2. Выполните вручную хук, например, через do_action('wpcat_daily_delete_old_orders'); в functions.php или через WP-CLI:
wp eval 'do_action("wpcat_daily_delete_old_orders");'

3. Проверьте, что устаревшие заказы удалились из базы (в админке и в базе данных в таблице wp_posts с типом shop_order).

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

  • Заказы не удаляются вовсе: убедитесь, что WooCommerce активен и класс WooCommerce доступен.
  • Скрипт удаляет слишком много заказов: проверьте параметры фильтрации, особенно дату и статус. Возможно, стоит увеличить период или уточнить статусы.
  • WP-Cron не работает: проверьте, активен ли WP-Cron на сайте. Для отладки используйте плагин WP Crontrol.
  • Удалённые заказы остаются в базе: возможно, включены сторонние плагины, которые блокируют удаление. Попробуйте удалить вручную или отключить конфликтующие плагины.

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

  • Перед автоматическим удалением рекомендуем делать резервные копии базы данных.
  • Если заказов очень много, разбивайте удаление на батчи, чтобы избежать превышения лимитов памяти и времени выполнения PHP.
  • Для оптимизации используйте WP-CLI, если есть доступ к серверу — это быстрее и надёжнее.
  • Для контроля процесса и уведомлений о выполнении можно добавить email-уведомления по результатам работы скрипта.

Сравнение решений: плагин vs собственный код

КритерийПлагин (например, WP Bulk Delete)Собственный код
ГибкостьОграничена функциями плагинаПолностью настраиваемо под задачу
ПроизводительностьМожет загружать сайт при массовом удаленииМожно оптимизировать (батчи, WP-CLI)
БезопасностьЗависит от качества плагинаКонтролируется разработчиком
ЗависимостиТребует установки стороннего ПОБез дополнительных плагинов
АвтоматизацияЕсть, но не всегда гибкаяМожно настроить полностью под расписание
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее