Удаление продаж WooCommerce по дате и статусу: пошаговое руководство

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

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

Стандартных инструментов для массового удаления заказов по таким фильтрам в WooCommerce нет. Удаление вручную через админку неудобно и рискованно при большом объёме данных. Решение — использовать программный подход с WP-CLI или кастомным PHP-скриптом.

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

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

Для начала создайте отдельный PHP-файл в корне сайта, например delete-orders.php. Важно, чтобы доступ к нему был ограничен по IP или паролем, чтобы избежать несанкционированного запуска.

<?php
// delete-orders.php

// Защитите файл, например, проверкой IP или пароля
$allowed_ip = '123.123.123.123';
if ($_SERVER['REMOTE_ADDR'] !== $allowed_ip) {
    http_response_code(403);
    exit('Access denied');
}

// Подключаем WordPress
require_once __DIR__ . '/wp-load.php';

// Проверка прав пользователя
if (!current_user_can('manage_woocommerce')) {
    wp_die('Нет прав на выполнение операции');
}

// Параметры удаления
$start_date = '2023-01-01';
$end_date = '2023-03-31';
$order_status = 'cancelled'; // например, 'completed', 'pending', 'cancelled'

// Запрос заказов
$args = [
    'post_type'      => 'shop_order',
    'post_status'    => 'wc-' . $order_status,
    'date_query'     => [
        [
            'after'     => $start_date,
            'before'    => $end_date,
            'inclusive' => true,
        ],
    ],
    'posts_per_page' => -1,
    'fields'         => 'ids',
];

$orders = get_posts($args);

if (empty($orders)) {
    echo 'Заказы не найдены для удаления.';
    exit;
}

// Удаление заказов
foreach ($orders as $order_id) {
    wp_delete_post($order_id, true); // true - без перемещения в корзину
}

echo count($orders) . ' заказ(ов) удалено.';
?>

2. Запуск скрипта и проверка результата

Загрузите файл delete-orders.php на сервер, откройте его через браузер с разрешённого IP. Если всё настроено правильно, увидите сообщение об удалении.

Для проверки результата зайдите в админку WooCommerce > Заказы, установите фильтр по дате и статусу, убедитесь, что заказы удалены.

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

  • В админке WooCommerce проверьте, что заказы с указанным статусом и датами исчезли.
  • Используйте запрос в базе данных MySQL для подтверждения отсутствия заказов:
    SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' AND post_status = 'wc-cancelled' AND post_date BETWEEN '2023-01-01' AND '2023-03-31';
  • Проверьте логи ошибок сервера на наличие проблем при запуске скрипта.

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

  • Нет прав на удаление: убедитесь, что пользователь, под которым выполняется скрипт, имеет права manage_woocommerce или админа.
  • Пустой результат запроса: проверьте правильность статуса заказа (он должен быть с префиксом wc-, например, wc-completed), а также корректность дат.
  • Удаление не происходит: убедитесь, что используется wp_delete_post($order_id, true) с параметром true для полного удаления, а не перемещения в корзину.
  • Доступ к скрипту открыт для всех: обязательно ограничьте доступ, иначе скрипт могут запустить посторонние, что приведёт к потере данных.

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

  • Перед массовым удалением сделайте резервную копию базы данных.
  • Для больших объёмов заказов используйте пакетную обработку, чтобы избежать таймаутов. Например, удаляйте по 100 заказов в цикле с задержкой.
  • Ограничивайте доступ к скриптам удаления по IP или через HTTP-аутентификацию.
  • Для регулярной очистки рассмотрите использование WP-CLI с командами:
wp post delete $(wp post list --post_type=shop_order --post_status=wc-cancelled --date_query_column=post_date --after=2023-01-01 --before=2023-03-31 --format=ids) --force
  • Используйте плагины оптимизации базы данных, например Clearfy Pro, для автоматической очистки и оптимизации.

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

МетодПлюсыМинусыКомпромисс
PHP-скрипт (как выше) Гибкость, можно настроить фильтры по дате и статусу Необходима защита, возможны таймауты при большом объёме Использовать пакетную обработку и защиту по IP
WP-CLI Быстрая работа, можно запускать из консоли, удобно для больших объёмов Требуется доступ к серверу и базовые навыки консоли Использовать для регулярных задач и автоматизации
Плагины Простой интерфейс, дополнительные функции очистки Не всегда есть фильтры по дате и статусу, могут замедлять сайт Использовать для периодической очистки и оптимизации
Как создать собственный тип записей WordPress для необычной структуры данных
09.01.2026
Как автоматически отправлять отзывы после покупки в WordPress
25.02.2026
Как отключить AJAX в WooCommerce на страницах корзины и оформления заказа
30.05.2026
Как добавить автоматическое создание резервных копий WordPress
13.12.2025
Автоматическое удаление старых записей WordPress по значению метаполя
22.01.2026