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

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

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

Диагностика проблемы: как проверить наличие отменённых заказов

Чтобы понять, есть ли на вашем сайте много отменённых заказов, выполните SQL-запрос к базе данных WordPress (используя phpMyAdmin или любой другой инструмент):

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

Если результат значительно больше нуля, имеет смысл настроить автоматическое удаление.

Как настроить автоматическое удаление отменённых заказов с помощью кода

WooCommerce не имеет встроенной функции для удаления заказов по расписанию, но мы можем реализовать это с помощью WP-Cron и пользовательской функции.

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

function wp24_delete_cancelled_orders() {
    $args = array(
        'post_type'      => 'shop_order',
        'post_status'    => 'wc-cancelled',
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );
    $cancelled_orders = get_posts($args);
    if (empty($cancelled_orders)) {
        return;
    }
    foreach ($cancelled_orders as $order_id) {
        wp_delete_post($order_id, true); // true - без перемещения в корзину
    }
}

2. Регистрация события WP-Cron для ежедневного запуска

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

add_action('wp24_daily_cancelled_orders_cleanup', 'wp24_delete_cancelled_orders');

3. Очистка планировщика при деактивации темы или плагина

function wp24_clear_cancelled_orders_cleanup_schedule() {
    $timestamp = wp_next_scheduled('wp24_daily_cancelled_orders_cleanup');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wp24_daily_cancelled_orders_cleanup');
    }
}
register_deactivation_hook(__FILE__, 'wp24_clear_cancelled_orders_cleanup_schedule');

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

  • Вручную создайте несколько заказов и отмените их.
  • Запустите функцию удаления вручную через админ-панель или с помощью WP-CLI: wp eval 'wp24_delete_cancelled_orders();'
  • Проверьте, что отменённые заказы удалились из базы (через админку WooCommerce или SQL-запросом).
  • Убедитесь, что в базе нет ошибок и сайт работает корректно.

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

  • Функция не запускается по расписанию: убедитесь, что на сайте есть посещения, иначе WP-Cron не срабатывает. Для теста можно использовать плагин WP Crontrol.
  • Удаляются не те заказы: проверьте правильность статуса wc-cancelled. Если у вас кастомные статусы, замените их в запросе.
  • Ошибки в логах или сайт тормозит: удаление большого количества заказов за раз может нагружать сервер. Можно реализовать удаление партиями, например, по 20 заказов за раз.

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

  • Всегда делайте резервное копирование базы перед запуском подобных скриптов.
  • Удаляйте заказы только с полной уверенностью, что они не нужны для отчётности или бухгалтерии.
  • Реализуйте удаление партиями, чтобы избежать превышения лимитов памяти или таймаутов сервера.
  • Для крупных магазинов используйте WP-CLI для пакетного удаления заказов с контролем прогресса.

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

МетодПлюсыМинусы
Удаление вручную через админку WooCommerceПросто, не требует кодаТрудоёмко при большом количестве заказов
Автоматизация через WP-Cron и код (пример выше)Автоматизация, не требует плагиновНужны базовые навыки разработки и тестирования
Плагины для очистки WooCommerceУдобный интерфейс, дополнительные функцииДополнительная нагрузка на сайт, возможные конфликты
Автоматическое удаление старых ревизий в WordPress для оптимизации базы данных
17.02.2026
Как отключить автоматические обновления в WordPress: практические решения и примеры кода
14.02.2026
Как удалить записи из категории WordPress без удаления самих записей
27.12.2025
Как установить уникальные метаданные для страниц WordPress
17.12.2025
Как создать простой шорткод в WordPress с применением WP24
13.11.2025