wpconsult.ru wordpress WP Consult

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

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

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

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

  • Замедление админки при просмотре списка заказов.
  • Рост базы данных MySQL без видимых причин.
  • Заметное увеличение времени бэкапа и восстановления.
  • Ошибки из-за превышения квот по объёму базы у хостинга.

Проверить количество заказов со статусом cancelled в базе можно запросом:

SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' AND post_status = 'wc-cancelled';

Пошаговое решение: автоматизация удаления отменённых заказов с помощью WP-Cron

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

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

function wpconsult_delete_cancelled_orders() {
    global $wpdb;
    // Получаем ID заказов со статусом "отменён"
    $orders = $wpdb->get_results(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'shop_order' AND post_status = 'wc-cancelled'"
    );

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

    foreach ($orders as $order) {
        wp_delete_post($order->ID, true); // true - без помещения в корзину
    }
}

Шаг 2. Регистрируем WP-Cron задачу для регулярного запуска

Добавьте код, который создаст задачу на ежедневный запуск:

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

add_action('wpconsult_delete_cancelled_orders_hook', 'wpconsult_delete_cancelled_orders');

Шаг 3. Очистка расписания (опционально)

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

function wpconsult_clear_delete_cancelled_orders_schedule() {
    $timestamp = wp_next_scheduled('wpconsult_delete_cancelled_orders_hook');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpconsult_delete_cancelled_orders_hook');
    }
}

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

  • Перейдите в раздел WooCommerce → Заказы и убедитесь, что отменённые заказы исчезли.
  • Выполните вручную функцию для проверки (например, вызвав wpconsult_delete_cancelled_orders() из админки с помощью сниппета или плагина Code Snippets).
  • Запросом к базе данных проверьте, что заказов со статусом wc-cancelled стало меньше или нет вовсе.
  • Отслеживайте логи сайта, чтобы выявить возможные ошибки удаления.

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

  • Заказы не удаляются: Проверьте, что статус заказа корректный — в WooCommerce отменённый статус хранится как wc-cancelled, а не просто cancelled.
  • Заказы удаляются, но остаются метаданные: функция wp_delete_post($id, true) удаляет пост и связанные метаданные, но если есть сторонние таблицы — их нужно очищать отдельно.
  • Задача WP-Cron не запускается: Убедитесь, что на сайте есть трафик (WP-Cron запускается при посещениях) или настройте системный cron, чтобы запускать wp-cron.php периодически.
  • Производительность падает при удалении большого числа заказов: Делайте удаление пакетами по 50-100 заказов, добавив пагинацию в запрос.

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

  • Всегда делайте резервную копию базы данных перед автоматической очисткой заказов.
  • Для больших магазинов лучше удалять заказы не чаще раза в неделю.
  • Добавьте логирование удалённых заказов для последующего аудита.
  • Если используете сторонние плагины для учёта заказов, проверьте совместимость удаления.
  • Рассмотрите использование плагинов оптимизации базы (например, Clearfy Pro) для дополнительной очистки и настройки.

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

МетодОписаниеПлюсыМинусы
Ручное удаление из админки Удаление заказов один за другим через панель WooCommerce Просто, без кода Трудозатратно, не подходит для большого количества заказов
Автоматизация c WP-Cron Регулярное удаление отменённых заказов через программный код и cron Автоматизация, экономия времени, поддержка базы в порядке Необходимы базовые навыки кодирования, проблемы с WP-Cron при низком трафике
Плагины очистки базы Использование плагинов для массовой очистки заказов и оптимизации Множество функций, удобство Зависимость от стороннего кода, возможные конфликты
×
Делай сайт лучше!!

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

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