WooCommerce: автоматическое удаление неактивных заказов с применением WP-Cron

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

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

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

Для начала нужно понять, какие заказы считаются неактивными и как их найти:

  • wc-pending — заказы, ожидающие оплаты;
  • wc-cancelled — отменённые вручную или системой;
  • wc-failed — неудачные платежи;
  • wc-on-hold — заказ поставлен на удержание, но не обработан долгое время.

Выберите статусы и период, например, удалить заказы старше 30 дней с этими статусами.

Пошаговое решение с использованием WP-Cron

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

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

function wpb_delete_old_inactive_orders() {
    $days = 30; // Период в днях
    $date = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $args = array(
        'status' => array('pending', 'cancelled', 'failed', 'on-hold'),
        'date_created' => '<' . $date,
        'limit' => -1,
        'return' => 'ids',
    );

    $orders = wc_get_orders($args);

    if (!empty($orders)) {
        foreach ($orders as $order_id) {
            wp_delete_post($order_id, true); // Полное удаление заказа
        }
    }
}

2. Регистрация и запуск WP-Cron задачи

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

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

add_action('wpb_daily_cleanup_hook', 'wpb_delete_old_inactive_orders');

3. Удаление задачи при деактивации плагина или темы

Чтобы избежать накопления ненужных задач, добавьте очистку при деактивации:

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

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

  • Перейдите в WooCommerce - Заказы и отфильтруйте по статусам pending, cancelled, failed, on-hold за период старше 30 дней. Заказы должны отсутствовать или значительно уменьшиться.
  • Для теста можете временно уменьшить период в функции удаления до 1 дня и проверить, удалятся ли старые заказы.
  • Проверьте логи сервера на наличие ошибок при выполнении WP-Cron.

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

  • WP-Cron не запускается автоматически: Проверьте, что на сайте есть трафик или настройте системный cron для вызова wp-cron.php.
  • Заказы не удаляются: Проверьте права пользователя, под которым запускается PHP, и убедитесь, что в функции wp_delete_post указан параметр true для полной очистки.
  • Удаляются ненужные заказы: Проверьте фильтр статусов и даты в аргументах wc_get_orders. Возможно, стоит добавить дополнительную проверку.

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

  • Не запускайте удаление заказов слишком часто, чтобы не создавать нагрузку на базу.
  • Перед удалением заказывайте резервное копирование базы данных.
  • Используйте функцию wp_delete_post с параметром true, чтобы полностью удалить связанные данные, включая метаданные и файлы.
  • Логируйте работу задачи, чтобы отслеживать количество удалённых заказов и возможные ошибки.

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

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как удалить кэш и оптимизировать базу данных WordPress без плагинов
20.12.2025
Как создать автоматический импорт постов из внешнего источника с фильтрами в WordPress
15.04.2026
WooCommerce: как удалить удалённые вариации товаров из базы данных
20.06.2026
Оптимизация загрузки картинок в WordPress: практические методы и примеры
15.11.2025
Запрет доступа к административной панели WordPress по IP: практическое руководство
07.11.2025
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее