Автоматическое удаление просмотренных заказов в WooCommerce с помощью PHP-кода

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

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

Что значит «просмотренный заказ» и какие статусы учитывать

Под «просмотренным» в данном случае будем понимать заказ, который был в состоянии cancelled, failed или refunded и который был просмотрен в админке (или в панели пользователя) более определённого времени назад. Именно эти статусы чаще всего связаны с неактивными, неиспользуемыми заказами.

Почему не удалять заказы со статусом completed или processing

Заказы с этими статусами — активные, связанные с реальными покупками. Их удаление приведёт к потере данных и нарушению учёта.

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

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

function wp24_auto_delete_viewed_orders() {
    global $wpdb;
    // Время в секундах: 30 дней
    $days = 30;
    $time_limit = time() - ( 60 * 60 * 24 * $days );

    // Получаем ID заказов со статусами cancelled, failed, refunded
    $order_statuses = array('wc-cancelled', 'wc-failed', 'wc-refunded');

    $placeholders = implode(",", array_fill(0, count($order_statuses), '%s'));

    $query = $wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} 
         WHERE post_type = 'shop_order'
         AND post_status IN ($placeholders)
         AND post_modified < %s",
         ...$order_statuses, date('Y-m-d H:i:s', $time_limit)
    );
    
    $order_ids = $wpdb->get_col($query);
    
    if (empty($order_ids)) {
        return;
    }

    foreach ($order_ids as $order_id) {
        // Можно добавить проверку, что заказ был просмотрен (опционально)
        wp_delete_post($order_id, true); // Полное удаление
    }
}

// Запускаем задачу ежедневно
if (!wp_next_scheduled('wp24_daily_delete_viewed_orders')) {
    wp_schedule_event(time(), 'daily', 'wp24_daily_delete_viewed_orders');
}
add_action('wp24_daily_delete_viewed_orders', 'wp24_auto_delete_viewed_orders');

Этот код удалит заказы со статусами «отменён», «ошибочный» и «возвращён» старше 30 дней. Вы можете изменить период в переменной $days.

Объяснение кода

  • Используется WP-Cron для запуска задачи раз в сутки.
  • Получаем ID заказов по статусу и дате последнего изменения.
  • Удаляем заказы полностью из базы с помощью wp_delete_post с флагом true.

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

  • Перейдите в админку WooCommerce – заказы.
  • Выберите фильтр по статусам «Отменён», «Ошибочный» и «Возвращён».
  • Проверьте, что заказы старше 30 дней отсутствуют.
  • Для полной проверки запустите WP-Cron вручную, например, с помощью плагина WP Crontrol.

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

  • Удаляются активные заказы: Проверьте, что в массиве $order_statuses указаны только статусы, которые действительно безопасно удалять.
  • Задача WP-Cron не запускается: Убедитесь, что на сайте есть посещения, или используйте системный CRON для вызова wp-cron.php.
  • Заказы не удаляются: Проверьте права пользователя, под которым запускается скрипт, и наличие ошибок в логах PHP.

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

  • Перед удалением сделайте полную резервную копию базы данных.
  • Если на сайте очень много заказов, разбивайте удаление на части, чтобы избежать таймаутов.
  • Используйте плагин Clearfy Pro для дополнительной чистки базы и оптимизации сайта https://wpshop.ru/plugins/clearfy.

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

МетодПлюсыМинусы
Удаление вручную через админкуПросто, не требует кодаДолгое, неэффективно при большом объёме заказов
Плагины для очистки базыУдобно, автоматизацияЗависимость от стороннего кода, может быть платным
Код на PHP с WP-Cron (предложенный)Полный контроль, бесплатно, автоматизацияТребуются базовые навыки разработки, настройка WP-Cron
Как использовать хук woocommerce_checkout_update_order_review в WooCommerce
21.05.2026
Автоматическое удаление просмотренных заказов в WooCommerce с помощью PHP-кода
19.06.2026
Как удалить неактивных пользователей из WooCommerce с помощью кода
19.06.2026
Оптимизация базы данных WordPress: лучшие методы и примеры
21.11.2025
Как исключить доставку для определённых товаров в WooCommerce с примером кода
22.04.2026