wpcontrol.ru wordpress WPControl.ru

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

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

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

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

1. Определение критериев удаления

В нашем примере удалять будем все заказы со статусами cancelled (отменён) и refunded (возвращён), которым более 30 дней.

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

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

function wpcontrol_delete_old_cancelled_refunded_orders() {
    $statuses = array('cancelled', 'refunded');
    $date_query = array(
        'column' => 'post_date',
        'before' => '30 days ago',
    );

    foreach ($statuses as $status) {
        $args = array(
            'post_type'      => 'shop_order',
            'post_status'    => 'wc-' . $status,
            'date_query'     => array($date_query),
            'posts_per_page' => -1,
            'fields'         => 'ids',
        );

        $orders = get_posts($args);

        if (!empty($orders)) {
            foreach ($orders as $order_id) {
                wp_delete_post($order_id, true); // true — без возможности восстановления
            }
        }
    }
}

3. Запуск функции по расписанию с помощью WP-Cron

Добавим событие, которое будет запускать эту функцию раз в сутки.

if (!wp_next_scheduled('wpcontrol_daily_order_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wpcontrol_daily_order_cleanup');
}

add_action('wpcontrol_daily_order_cleanup', 'wpcontrol_delete_old_cancelled_refunded_orders');

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

  • Зайдите в админку WordPress в раздел WooCommerce > Заказы.
  • Отфильтруйте заказы по статусам «Отменён» и «Возвращён» и убедитесь, что нет заказов старше 30 дней.
  • Проверьте таблицу wp_posts в базе данных: записи с типом shop_order и статусами wc-cancelled, wc-refunded, которым больше 30 дней, должны отсутствовать.
  • Для ручного теста запустите функцию wpcontrol_delete_old_cancelled_refunded_orders() через консоль WP-CLI или временно вызовите её из админки и проверьте удаление.

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

  • Удаление не происходит: Убедитесь, что событие WP-Cron запланировано (проверьте через плагин WP Crontrol). Если сайт не посещается регулярно, WP-Cron не сработает — настройте системный cron для запуска wp-cron.php.
  • Удаляются неправильные заказы: Проверьте правильность статусов в массиве и формат даты. Статусы должны начинаться с wc-. Для нестандартных статусов скорректируйте массив $statuses.
  • Восстановление заказов невозможно: В функции wp_delete_post() параметр true удаляет пост без корзины. При тестах можно заменить на false.
  • Большая нагрузка при удалении: Если заказов много, разбейте удаление на пакеты, добавив ограничение posts_per_page (например, 50) и запуск по нескольку раз в крон-задании.

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

  • Перед автоматическим удалением создавайте резервные копии базы данных.
  • Для крупных магазинов используйте разбивку выборки заказов на порции и промежуточные паузы между удалениями, чтобы не блокировать базу.
  • Если WooCommerce интегрирован с внешними системами учета, убедитесь, что автоматическое удаление не нарушит синхронизацию.
  • Используйте плагин Clearfy Pro для оптимизации базы и удаления заказов с расширенными возможностями без кода.

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

МетодПлюсыМинусыПример
Код в functions.php + WP-CronГибкий, без плагинов, можно кастомизироватьТребует навыков, риски при ошибках, нет интерфейсаКод из статьи
Плагин Clearfy ProИнтерфейс, дополнительные функции, безопасные операцииПлатный, менее гибкий кодClearfy Pro
Ручное удаление через админкуПросто, без кодаТрудоёмко, риск пропуска, не подходит для большого объёмаWooCommerce > Заказы
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙