wpcodes.ru wordpress WP Codеs

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

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

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

Как определить заказы для удаления

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

  • Заказы со статусом cancelled или failed старше определённого количества дней.
  • Заказы в статусе pending, которые не были обработаны в течение, например, недели.

Выбор условий зависит от бизнес-логики. Важно не удалять активные или недавно созданные заказы.

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

Реализуем кастомный код, который будет запускаться по крон-задаче WordPress и удалять заказы старше заданного срока. Для этого используем WP-Cron и стандартные функции WooCommerce.

1. Регистрируем собственное событие WP-Cron

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

Этот код добавляем в файл functions.php вашей темы или в кастомный плагин. Событие будет запускаться ежедневно.

2. Реализация функции удаления заказов

add_action('wpcodes_delete_old_orders', function() {
    $days = 30; // удалять заказы старше 30 дней
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $args = [
        'limit' => -1,
        'status' => ['cancelled', 'failed', 'pending'],
        'date_created' => '<' . $date_threshold,
        'return' => 'ids',
    ];

    $orders = wc_get_orders($args);

    foreach ($orders as $order_id) {
        wp_delete_post($order_id, true); // принудительное удаление
    }
});

Здесь мы выбираем все заказы с нужными статусами, созданные более 30 дней назад, и удаляем их полностью из базы.

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

  • Подождите наступления времени запуска cron-задачи (или вызовите её вручную, например, с помощью плагина WP Crontrol).
  • Проверьте в админке WooCommerce раздел «Заказы» — старые заказы с нужными статусами должны исчезнуть.
  • Для проверки можно вывести количество удалённых заказов в лог, добавив error_log() внутрь цикла.

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

  • Крон-задача не запускается: WP-Cron зависит от посещений сайта. Для гарантированного запуска настройте системный крон на сервере или вручную вызовите событие через WP Crontrol.
  • Заказы не удаляются: Проверьте, что статусы и даты заданы корректно, а функция wp_delete_post() вызывается с параметром true для полного удаления.
  • Удаляются нужные заказы: Проверьте фильтр по дате и статусам, возможно, стоит добавить дополнительные условия.

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

  • Регулярно делайте бэкапы базы данных перед автоматическим удалением заказов.
  • Если заказов много, разбивайте удаление на партии, чтобы не превышать лимит памяти или времени выполнения.
  • Для больших магазинов лучше запускать процесс удаления через системный cron, чтобы избежать задержек и ошибок WP-Cron.
  • Перед удалением можно отправлять уведомления администратору, чтобы иметь возможность отменить операцию.

Сравнительная таблица: удаление заказов через код и плагины

МетодПреимуществаНедостатки
Кастомный код (как в статье)Полный контроль, отсутствие нагрузки от плагинов, легкая кастомизацияТребует знаний PHP, нужно следить за cron, нет UI
Плагины (например, Advanced Order Cleaner)Простота настройки, UI, готовые функцииДополнительная нагрузка, не всегда гибкие фильтры, риск конфликтов

Чек-лист для внедрения автоматического удаления заказов

  • Определить критерии для удаления заказов (статус, дата).
  • Добавить и протестировать код удаления в тестовой среде.
  • Настроить WP-Cron или системный cron для регулярного запуска.
  • Проверить работу на практике и отследить логи.
  • Обеспечить резервное копирование базы данных.
×
WPShop
партнерка без «но»!

До 3225₽ за каждую продажу

Подключиться к игре