Автоматическое удаление заказов WooCommerce со статусом «Возвращено»

Диагностика задачи: зачем нужно удалять заказы со статусом «Возвращено»

В магазинах на WooCommerce с большим количеством возвратов часто накапливаются заказы со статусом «Возвращено» (refunded), которые занимают место в базе и усложняют аналитику. Ручное удаление таких заказов неудобно и занимает много времени. Автоматизация этого процесса позволяет поддерживать порядок и оптимизировать работу с данными.

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

Заказы в WooCommerce имеют статус, который хранится в мета-данных заказа. Проверить статус заказа можно так:

$order = wc_get_order( $order_id );
$status = $order->get_status(); // например, 'refunded'

Нужно найти все заказы со статусом refunded и удалить их автоматически по расписанию, например, раз в неделю.

Пошаговое решение: автоматическое удаление заказов «Возвращено» с помощью WP-Cron

1. Создать функцию удаления заказов по статусу

function wp_delete_refunded_orders() {
    $args = array(
        'limit' => -1, // Без лимита
        'status' => 'refunded',
        'return' => 'ids',
    );
    $orders = wc_get_orders( $args );

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

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

function wp_schedule_refunded_orders_cleanup() {
    if ( ! wp_next_scheduled( 'wp_cleanup_refunded_orders_event' ) ) {
        wp_schedule_event( time(), 'weekly', 'wp_cleanup_refunded_orders_event' );
    }
}
add_action( 'wp', 'wp_schedule_refunded_orders_cleanup' );

add_action( 'wp_cleanup_refunded_orders_event', 'wp_delete_refunded_orders' );

Этот код добавляет еженедельное событие, которое будет запускать функцию удаления заказов.

3. Проверка и отладка работы

  • Для теста можно вручную вызвать wp_delete_refunded_orders(); из файла functions.php или через консоль WP-CLI.
  • Проверить наличие запланированных событий можно с помощью плагина WP Crontrol.
  • Проверить удаление заказов можно в админке WooCommerce, убедившись, что заказы со статусом «Возвращено» исчезли.

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

  • В админке WooCommerce зайдите в список заказов и отфильтруйте по статусу «Возвращено» — список должен быть пустым после запуска скрипта.
  • Проверьте логи сервера на наличие ошибок PHP, связанных с функцией удаления.
  • Используйте WP-CLI команду wp wc order list --status=refunded (при наличии соответствующего пакета) для проверки заказов в терминале.

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

  • Заказы не удаляются: проверьте, что функция wp_delete_post вызывается с флагом true для полного удаления, а не в корзину.
  • Ошибка планировщика WP-Cron: убедитесь, что на сайте активно выполнение WP-Cron, или настроен системный cron для запуска wp-cron.php.
  • Неправильный статус заказа: убедитесь, что статус именно refunded (без ошибок в названии или регистра).
  • Потеря данных: перед удалением сделайте резервную копию базы данных, чтобы избежать необратимой потери нужных данных.

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

  • Удаление большого количества заказов за раз может нагружать сервер — ограничьте число удаляемых заказов за один запуск, например, добавив параметр 'limit' => 100 и реализовав постраничное удаление.
  • Запускайте WP-Cron в ночное время с низкой нагрузкой.
  • Обязательно создавайте резервные копии перед автоматическим удалением данных.
  • Ограничьте доступ к функциям удаления через проверку прав пользователя, если вызываете вручную.

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

МетодПлюсыМинусы
Ручное удаление через админкуПростота, контрольМного времени, неудобно при больших объемах
Плагины очистки заказовАвтоматизация, часто с UIДоп. нагрузка, возможна несовместимость
Код на базе WP-Cron (описанный)Гибкость, легковесность, без лишних плагиновТребует базовых знаний разработки, настройка
Как создать перенаправление в WordPress: плагины и кодовые решения
05.11.2025
Автоматизация маркетинговых переадресаций в WordPress
29.12.2025
Как корректно удалить зависимые данные от удалённых плагинов WooCommerce
07.05.2026
Как автоматизировать удаление незавершённых заказов WooCommerce без плагинов
14.06.2026
Кастомизация полей оформления заказа WooCommerce без плагинов: подробное руководство
10.05.2026