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

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

Отменённые заказы в WooCommerce могут накапливаться в базе, занимая место и замедляя работу сайта, особенно при большом количестве транзакций. Стандартный функционал WooCommerce не предлагает автоматического удаления таких заказов, что приводит к росту таблицы wp_posts и связанных с ней wp_postmeta. Если вы заметили замедление админки или увеличение размера базы данных, стоит рассмотреть автоматическую очистку отменённых заказов.

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

1. Проверка статуса заказов в базе

Отменённые заказы имеют статус cancelled (в английской версии WooCommerce). Для проверки выполните SQL-запрос через phpMyAdmin или консоль:

SELECT ID, post_status FROM wp_posts WHERE post_type = 'shop_order' AND post_status = 'wc-cancelled';

Если количество записей большое, очистка актуальна.

2. Использование WP-CLI для удаления заказов

WP-CLI позволяет управлять заказами из командной строки. Для удаления отменённых заказов используйте:

wp post delete $(wp post list --post_type=shop_order --post_status=wc-cancelled --field=ID) --force

Опция --force удаляет записи полностью, минуя корзину.

3. Автоматизация удаления через крон-задачу

Создайте PHP-скрипт, который будет запускать удаление, и добавьте его в системный cron или в WordPress Cron.

function wc_delete_cancelled_orders() {
    $args = [
        'post_type'   => 'shop_order',
        'post_status' => 'wc-cancelled',
        'fields'      => 'ids',
        'numberposts' => -1
    ];
    $orders = get_posts($args);
    if (!empty($orders)) {
        foreach ($orders as $order_id) {
            wp_delete_post($order_id, true);
        }
    }
}

// Добавляем в WP-Cron, например, ежедневно
add_action('wp_loaded', function() {
    if (!wp_next_scheduled('wc_delete_cancelled_orders_hook')) {
        wp_schedule_event(time(), 'daily', 'wc_delete_cancelled_orders_hook');
    }
});
add_action('wc_delete_cancelled_orders_hook', 'wc_delete_cancelled_orders');

4. Проверка и запуск вручную

Для однократного запуска можно вызвать функцию вручную в функции темы или через плагин для выполнения PHP-кода:

wc_delete_cancelled_orders();

Или использовать WP-CLI команду, описанную выше.

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

  • Запрос в базе SELECT COUNT(*) FROM wp_posts WHERE post_type='shop_order' AND post_status='wc-cancelled'; должен вернуть 0 (или значительно меньше, если новые отменённые заказы появились недавно).
  • В админке WooCommerce в разделе «Заказы» отменённые заказы не отображаются или их количество уменьшилось.
  • Мониторинг размера таблиц wp_posts и wp_postmeta показывает снижение нагрузки.

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

  • Удаление не происходит: Проверьте наличие хука и расписание WP-Cron с помощью wp cron event list.
  • Удаляются не все отменённые заказы: Убедитесь, что статус заказов именно wc-cancelled, иногда может быть кастомный статус.
  • Ошибки прав доступа: WP-CLI должен запускаться от пользователя с правами на файлы сайта, а PHP-скрипт — с корректным доступом к базе.
  • Проблемы с производительностью при удалении: удаляйте заказы порциями, например, по 50 штук, чтобы не перегружать сервер.

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

  • Перед удалением сделайте резервную копию базы данных.
  • Добавьте проверку прав пользователя, если функция вызывается через админку.
  • Используйте WP-CLI для массовых операций вместо PHP-скриптов, если сервер позволяет.
  • Оптимизируйте базу после удаления: OPTIMIZE TABLE wp_posts, wp_postmeta; для MySQL.
  • Если заказам нужны логи, перед удалением сохраняйте их в отдельной таблице или файле.

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

МетодПлюсыМинусы
WP-CLIБыстрое удаление, минует PHP-лимиты, удобен для администраторовТребует доступа к серверу и знания командной строки
WP-Cron с PHP-функциейАвтоматизация внутри WordPress, можно кастомизироватьМожет не сработать при низкой посещаемости сайта, нагрузка на PHP
Ручное удаление через админкуПростота для небольшого количества заказовНе подходит для массового удаления, риск ошибок
WooCommerce: как автоматически удалять отменённые заказы без ошибок
28.06.2026
Как удалить виджеты из сайдбара в WordPress: практическое руководство
11.01.2026
Как удалить удалённые пользователи WordPress и очистить базу данных
08.02.2026
Установка и настройка PHP 8 в WordPress: практическое руководство
05.04.2026
Как избежать проблем с конфликтами плагинов в WordPress: практические решения и примеры кода
21.03.2026
×
до 3225₽

WPShop - честная партнерка!

Зарабатывай с каждой продажи

Подключиться ⋙