Как правильно удалить незаконченые заказы WooCommerce через PHP

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

Незаконченые заказы (например, со статусом "отменен" или "ожидание оплаты") накапливаются в базе WooCommerce, что замедляет работу сайта и усложняет управление заказами. Часто владельцы магазинов не знают, как без плагинов автоматически и безопасно удалить такие заказы.

Проверьте, сколько заказов с нужным статусом хранится в базе, выполнив SQL-запрос в phpMyAdmin или через WP-CLI:

SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' AND post_status IN ('wc-pending', 'wc-cancelled', 'wc-failed');

Если количество заказов велико (сотни и более), стоит настроить автоматическое удаление.

Пошаговое решение: удаление незаконченых заказов с помощью PHP кода

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

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

function wpacademy_delete_old_unfinished_orders() {
    // Статусы заказов для удаления
    $statuses = array('wc-cancelled', 'wc-failed', 'wc-pending');
    // Сколько дней хранить заказы
    $days_to_keep = 30;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_to_keep . ' days'));

    foreach ($statuses as $status) {
        // Получаем заказы старше $days_to_keep дней
        $args = array(
            'post_type' => 'shop_order',
            'post_status' => $status,
            'date_query' => array(
                array(
                    'column' => 'post_date',
                    'before' => $date_threshold,
                ),
            ),
            '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 - безвозвратное удаление
            }
        }
    }
}

2. Настройка автоматического запуска через WP-Cron

Для регулярного удаления добавьте хуки в functions.php:

if (!wp_next_scheduled('wpacademy_delete_old_unfinished_orders_hook')) {
    wp_schedule_event(time(), 'daily', 'wpacademy_delete_old_unfinished_orders_hook');
}
add_action('wpacademy_delete_old_unfinished_orders_hook', 'wpacademy_delete_old_unfinished_orders');

Этот код запустит удаление раз в сутки.

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

  • Выполните SQL-запрос из раздела диагностики до и после работы задачи, чтобы убедиться, что старые заказы удалены.
  • Посмотрите раздел заказов WooCommerce в админке — устаревшие незаконченые заказы должны пропасть.
  • Проверьте wp-cron: вызовите вручную через WP-CLI wp cron event run wpacademy_delete_old_unfinished_orders_hook.

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

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

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

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

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

МетодПлюсыМинусы
Удаление через PHP + WP-Cron (код)Полный контроль, бесплатно, без плагиновНужны навыки программирования, риски при ошибках
Плагины оптимизации WooCommerceУдобно, часто с GUI, поддержкаДополнительная нагрузка, платные функции
Ручное удаление через админкуПросто, быстро для единичных случаевНе подходит для регулярной очистки большого объема
Как использовать хуки в WordPress для решения практических задач
04.12.2025
Как удалить или скрыть свойства товара WooCommerce в админке WordPress
20.04.2026
Оптимизация базы данных WordPress: удаление старых версий и сбор статистики
09.11.2025
Как удалить неиспользуемые шорткоды в WordPress: пошаговое руководство
01.03.2026
Удаление и оптимизация базы данных WordPress без плагинов: пошаговое руководство
18.02.2026