Автоматическое удаление отменённых заказов WooCommerce для оптимизации базы данных

Почему важно удалять отменённые заказы в WooCommerce

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

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

Для оценки ситуации используйте SQL-запрос к базе данных:

SELECT post_status, COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' GROUP BY post_status;

Если количество записей с post_status = 'wc-cancelled' исчисляется тысячами, пора автоматизировать их удаление.

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

1. Создаём функцию удаления старых отменённых заказов

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

function wplab_delete_old_cancelled_orders() {
    global $wpdb;
    // Удаляем отменённые заказы старше 30 дней
    $date = date('Y-m-d H:i:s', strtotime('-30 days'));
    $orders = $wpdb->get_col(
        $wpdb->prepare(
            "SELECT ID FROM {$wpdb->posts} 
             WHERE post_type = 'shop_order' 
             AND post_status = 'wc-cancelled' 
             AND post_date < %s",
            $date
        )
    );

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

2. Запускаем функцию по расписанию через WP-Cron

Добавьте хук для ежедневного запуска:

// Регистрируем событие при активации темы или плагина
if (!wp_next_scheduled('wplab_daily_delete_cancelled_orders')) {
    wp_schedule_event(time(), 'daily', 'wplab_daily_delete_cancelled_orders');
}

// Хук для выполнений функции
add_action('wplab_daily_delete_cancelled_orders', 'wplab_delete_old_cancelled_orders');

3. Отменяем крон при деактивации

// При деактивации темы или плагина
function wplab_deactivate_delete_cancelled_orders() {
    $timestamp = wp_next_scheduled('wplab_daily_delete_cancelled_orders');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wplab_daily_delete_cancelled_orders');
    }
}

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

Спустя сутки после активации скрипта выполните SQL-запрос из блока диагностики снова. Количество заказов со статусом wc-cancelled должно уменьшиться, особенно старше 30 дней. Можно дополнительно проверить наличие удалённых заказов в админке WooCommerce в разделе заказов.

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

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

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

  • Всегда делайте бэкап базы данных перед внедрением автоматических удалений.
  • Для больших баз данных оптимизируйте запросы и при необходимости выполняйте удаление пакетами.
  • Не используйте wp_delete_post без параметра true, чтобы избежать попадания заказов в корзину и двойной нагрузки.
  • Если WP-Cron не надёжен на вашем хостинге, настройте системный cron и вызов wp-cron.php через curl или wget.

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

МетодПлагинКодПлюсыМинусы
Автоматическое удалениеСпециализированные плагины (например, WP-Optimize)Код из статьиПростота, контроль, бесплатностьТребует навыков, возможны конфликты
Удаление вручнуюАдминка WooCommerceSQL-запросыПростота для единичных случаевНе автоматизировано, риск ошибок
Удаление неиспользуемых пользовательских полей в WordPress
26.01.2026
WooCommerce: авторизация через социальные сети в одном шаге без плагинов
10.06.2026
Как использовать WPRemark для автоматического контроля качества контента в WordPress
23.01.2026
Установка и настройка WPRemark для автоматического контроля качества контента в WordPress
20.03.2026
Оптимальное использование хуков в WordPress: практические советы и примеры
16.01.2026