WooCommerce: как автоматически удалять отменённые и неактивные заказы

|

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

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

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

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

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

function wpreboot_delete_orders_by_status($statuses = array('cancelled', 'failed'), $days_old = 30) {
    if (!class_exists('WooCommerce')) {
        return;
    }

    $date_query = array(
        'before' => date('Y-m-d H:i:s', strtotime("-{$days_old} days")),
        'inclusive' => true
    );

    $args = array(
        'limit' => -1,
        'status' => $statuses,
        'date_created' => $date_query,
        'return' => 'ids',
    );

    $orders = wc_get_orders($args);

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

2. Создание WP-CLI команды для ручного запуска

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

if (defined('WP_CLI') && WP_CLI) {
    WP_CLI::add_command('wpreboot delete_old_orders', function($args, $assoc_args) {
        $statuses = isset($assoc_args['statuses']) ? explode(',', $assoc_args['statuses']) : array('cancelled', 'failed');
        $days_old = isset($assoc_args['days']) ? intval($assoc_args['days']) : 30;
        wpreboot_delete_orders_by_status($statuses, $days_old);
        WP_CLI::success("Orders with statuses (" . implode(', ', $statuses) . ") older than {$days_old} days deleted.");
    });
}

3. Автоматизация с помощью WP Cron

Добавьте планировщик задач, который будет запускать удаление автоматически, например, раз в неделю:

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

add_action('wpreboot_cleanup_old_orders_hook', function () {
    wpreboot_delete_orders_by_status(array('cancelled', 'failed'), 30);
});

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

Для проверки работы решения:

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

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

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

МетодПреимуществаНедостаткиКогда использовать
PHP-код с WP Cron Автоматизация без внешних инструментов, гибкость настройки Зависит от трафика сайта, возможны пропуски cron Небольшие и средние магазины с умеренным трафиком
WP-CLI команда вручную Быстрая и надёжная очистка, подходит для больших баз Требует доступа к серверу и навыков командной строки Средние и крупные магазины, специалисты с доступом к серверу
Плагины для очистки заказов Интерфейс, готовые решения, часто с дополнительными функциями Могут влиять на производительность, не всегда гибкие Новички, желающие быстро настроить без кода
WooCommerce: автоматическое удаление просмотренных товаров из корзины
30.04.2026
Как удалить пустые термины в WordPress через код и плагины
05.04.2026
Создаем настройки плагинов в WordPress с практическими примерами
02.12.2025
WooCommerce: как автоматически удалять заказы по определённому статусу
31.05.2026
Как избежать ошибок 502 Bad Gateway в WordPress: практические решения
20.01.2026
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее