wpcore.ru wordpress wpcore.ru

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

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

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

Стандартно WooCommerce не удаляет заказы автоматически, а лишь меняет их статус. Поэтому возникает задача — настроить автоматическое удаление заказов по определённым критериям, например, по дате или статусу.

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

Пошаговое решение с использованием WP-Cron

Для автоматизации удаления создадим кастомную функцию, которая будет запускаться по расписанию и удалять заказы со статусами cancelled и completed, старше установленного количества дней.

function wpcore_delete_old_orders() {
    // Количество дней, по истечении которых заказы будут удаляться
    $days = 30;
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    // Статусы заказов для удаления
    $statuses = array('completed', 'cancelled');

    foreach ($statuses as $status) {
        $args = array(
            'limit' => -1,
            'return' => 'ids',
            'status' => $status,
            'date_created' => '<' . $date_threshold
        );

        $orders = wc_get_orders($args);

        foreach ($orders as $order_id) {
            wp_trash_post($order_id); // Перемещаем заказ в корзину
        }
    }
}

// Регистрируем событие WP-Cron при активации темы или плагина
function wpcore_schedule_order_cleanup() {
    if (!wp_next_scheduled('wpcore_order_cleanup_hook')) {
        wp_schedule_event(time(), 'daily', 'wpcore_order_cleanup_hook');
    }
}
add_action('wp', 'wpcore_schedule_order_cleanup');

// Привязываем функцию к крон-хуку
add_action('wpcore_order_cleanup_hook', 'wpcore_delete_old_orders');

// Очистка при деактивации (если создано в плагине)
function wpcore_clear_order_cleanup_schedule() {
    $timestamp = wp_next_scheduled('wpcore_order_cleanup_hook');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpcore_order_cleanup_hook');
    }
}

Объяснение ключевых моментов

  • wc_get_orders с параметрами status и date_created позволяет получить нужные заказы.
  • Удаление происходит через wp_trash_post, чтобы не потерять данные сразу — можно восстановить из корзины.
  • WP-Cron настроен на ежедневный запуск, что достаточно для большинства магазинов.
  • Параметр $days можно менять под свои требования.

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

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

  1. Создайте тестовый заказ со статусом completed или cancelled и установите дату создания старше 30 дней (можно через базу данных вручную или с помощью плагина для редактирования заказов).
  2. Запустите крон-задачу вручную, например, через плагин WP Crontrol, вызвав событие wpcore_order_cleanup_hook.
  3. Проверьте, что заказ переместился в корзину (Trash) в разделе заказов WooCommerce.
  4. Если всё работает, через 30 дней WP-Cron удалит такие заказы автоматически.

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

  • Заказы не удаляются: проверьте, активен ли WP-Cron (в некоторых случаях он отключён); можно запустить вручную через WP Crontrol.
  • Фильтр по дате не срабатывает: убедитесь, что дата заказа действительно старше порога; формат даты должен быть Y-m-d H:i:s.
  • Удаление происходит слишком часто или слишком редко: проверьте периодичность запуска крон-задачи и значение переменной $days.
  • Заказы не перемещаются в корзину, а удаляются сразу: используйте wp_trash_post, а не wp_delete_post, чтобы избежать потери данных без возможности восстановления.

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

  • Перед удалением заказов убедитесь, что есть резервная копия базы данных.
  • Если заказов много, разбивайте удаление на партии, чтобы избежать таймаутов. Например, добавьте параметр limit по 50 заказов и вызывайте функцию несколько раз по крону.
  • Используйте плагин Clearfy Pro (https://wpshop.ru/plugins/clearfy?source=wpcore.ru&medium=article&campaign=woocommerce-avtomaticheskoe-udaleniye-otmenennyh-i-zavершennyh-zakazov-po-datam) для комплексной оптимизации WooCommerce и безопасности сайта.
  • Мониторьте размер базы и время отклика админки после внедрения — это поможет отследить эффективность автоматизации.

Таблица сравнения методов удаления заказов

МетодПреимуществаНедостатки
Удаление вручную через админкуПростота, точный контрольТрудозатратно, не подходит для большого количества заказов
Автоматизация через WP-Cron и wp_trash_postАвтоматический процесс, безопасное удаление с возможностью восстановленияНужно контролировать WP-Cron, возможны таймауты при большом объёме
Использование плагинов очистки базыУдобство, дополнительные функции оптимизацииМогут конфликтовать с другими плагинами, не всегда бесплатны
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее