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

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

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

Перед настройкой автоматического удаления важно точно определить, какие статусы следует удалять, чтобы не потерять важную информацию для отчетности или бухгалтерии.

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

1. Определяем статусы заказов для удаления

В WooCommerce по умолчанию есть статусы: pending, failed, cancelled, refunded, completed и другие. Чаще всего удаляют заказы со статусами cancelled и failed.

2. Создаем функцию удаления заказов с нужным статусом

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

function wpapp_delete_orders_by_status() {
    // Указываем статусы для удаления
    $statuses_to_delete = array('cancelled', 'failed');

    foreach ($statuses_to_delete as $status) {
        $args = array(
            'limit'        => -1, // Получаем все заказы
            'status'       => $status,
            'return'       => 'ids',
            'paginate'     => false,
        );

        $orders = wc_get_orders($args);

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

3. Автоматизируем выполнение через WP-Cron

Чтобы запускать удаление автоматически, настроим WP-Cron. Добавьте в functions.php следующий код:

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

add_action('wpapp_delete_orders_cron_hook', 'wpapp_delete_orders_by_status');

Этот код запустит удаление заказов один раз в сутки.

4. Удаляем задачу WP-Cron (при необходимости)

Если нужно остановить автоматическое удаление, используйте:

$timestamp = wp_next_scheduled('wpapp_delete_orders_cron_hook');
if ($timestamp) {
    wp_unschedule_event($timestamp, 'wpapp_delete_orders_cron_hook');
}

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

  • В админке WooCommerce перейдите в раздел «Заказы» и отфильтруйте по статусам, которые вы указали для удаления. Все заказы с этими статусами должны отсутствовать.
  • Можно вручную запустить функцию удаления, вызвав wpapp_delete_orders_by_status() из консоли WP-CLI или временно через хук init.
  • Проверьте, что заказы удаляются без ошибок, просмотрев логи сервера или включив WP_DEBUG.

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

  • Заказы не удаляются: проверьте, что функция запускается (добавьте временный error_log внутри функции). Убедитесь, что WP-Cron работает корректно (например, с плагином WP Crontrol).
  • Удаляются не те статусы: подтвердите правильность имен статусов в массиве $statuses_to_delete. Для проверки статусов используйте функцию wc_get_order_statuses().
  • Заказы остаются в корзине (trash): важно использовать wp_delete_post($order_id, true); с параметром true для окончательного удаления.
  • Потеря данных о заказах: убедитесь, что удаление заказов по статусу не противоречит требованиям учета и отчетности вашего бизнеса.

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

  • Перед удалением сделайте резервную копию базы данных, особенно если удаляете много записей.
  • Если заказов много, ограничьте количество удаляемых заказов за один запуск функции, чтобы избежать превышения времени выполнения. Например, добавьте параметр 'limit' => 50 и запустите функцию несколько раз через WP-Cron.
  • Добавьте логирование удаленных заказов для аудита и возможности восстановления в случае ошибок.
  • Проверьте, что автоматическое удаление не конфликтует с плагинами для отчетности или бухгалтерии.

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

МетодПлюсыМинусы
Удаление через админку WooCommerceПростой и безопасный методРучной, неудобен при большом количестве заказов
Кастомный код + WP-CronАвтоматизация, гибкость, можно настроить фильтрыТребует навыков разработки, риск удаления важных данных
Плагины для управления заказамиИнтерфейс и дополнительные функцииМогут влиять на производительность, часто платные

Наш каталог плагинов WordPress