wpcorp.ru wordpress WP Corp

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

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

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

Удаление старых заказов позволяет освободить ресурсы сервера и ускорить работу сайта. Однако делать это нужно аккуратно, чтобы не потерять важные данные.

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

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

Для автоматизации процесса мы будем использовать WP-Cron — встроенный планировщик задач WordPress. Напишем функцию для удаления заказов старше определённой даты и зарегистрируем её на выполнение по расписанию.

Пошаговое решение

  1. Добавьте следующий код в файл functions.php вашей дочерней темы или в плагин для кастомных функций:
function wpcorp_delete_old_woocommerce_orders() {
    $days = 90; // удалять заказы старше 90 дней
    $date = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $args = array(
        'status' => 'completed', // можно указать нужный статус
        'date_created' => '<' . $date,
        'limit' => -1,
        'return' => 'ids',
    );

    $orders = wc_get_orders($args);

    foreach ($orders as $order_id) {
        wp_trash_post($order_id); // отправляем заказ в корзину
    }
}

// Регистрируем событие, если оно ещё не запланировано
if (!wp_next_scheduled('wpcorp_daily_delete_old_orders')) {
    wp_schedule_event(time(), 'daily', 'wpcorp_daily_delete_old_orders');
}

add_action('wpcorp_daily_delete_old_orders', 'wpcorp_delete_old_woocommerce_orders');
  • Этот код создаёт ежедневное задание, которое ищет и удаляет заказы со статусом completed, созданные более 90 дней назад.
  • Если хотите удалять заказы с другими статусами, замените параметр 'status' => 'completed' на нужный, например, 'cancelled' или массив статусов.
  • Для немедленного теста вызовите функцию вручную в админке или через WP-CLI:
  • wp eval 'wpcorp_delete_old_woocommerce_orders();'

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

    • Зайдите в WooCommerce - Заказы и убедитесь, что заказы старше 90 дней со статусом completed переместились в корзину.
    • Проверьте дату создания оставшихся заказов — они должны быть новее пороговой даты.
    • Для мониторинга работы WP-Cron используйте плагин WP Crontrol. Там вы увидите запланированное событие wpcorp_daily_delete_old_orders.

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

    • Заказы не удаляются: проверьте, что WP-Cron работает. Если на сервере мало трафика, WP-Cron может не запускаться. Рекомендуется настроить системный cron для вызова wp-cron.php.
    • Удаляются не те заказы: проверьте фильтр 'status' и дату 'date_created' — возможно, стоит скорректировать параметры.
    • Заказы не попадают в корзину (trash): убедитесь, что посты заказов поддерживают статус корзины, и у вас есть права для удаления.
    • Большая нагрузка при удалении: если заказов много, удаляйте партиями, например, по 100 штук, чтобы не нагружать сервер.

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

    • Перед удалением заказов сделайте резервную копию базы данных.
    • Не используйте wp_delete_post() без крайней необходимости — лучше перемещать заказы в корзину, чтобы была возможность восстановления.
    • Для больших магазинов рекомендуется удалять заказы партиями с использованием пагинации и промежуточных задержек.
    • Регулярно проверяйте логи ошибок PHP и WooCommerce, чтобы убедиться, что процесс удаления проходит без сбоев.
    • Оптимизируйте таблицы базы данных после удаления заказов с помощью SQL-команды OPTIMIZE TABLE wp_posts; и связанных таблиц.

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

    МетодПлюсыМинусыКомпромисс
    Ручное удаление через админку Простота, контроль Трудоёмко при большом объёме Подходит для редких случаев
    Автоматизация через WP-Cron + кастомный код (как в статье) Полное управление, гибкость Требует навыков, возможны сбои WP-Cron Лучше всего для регулярного удаления
    Плагины для очистки заказов Удобство, интерфейс Ограниченная кастомизация, нагрузка Подходит для новичков, но с осторожностью
    ×
    WPRemark
    Внимание Внимание Внимание Внимание
    -15%

    на WPRemark плагин WordPress

    Прокачай свой сайт! ⋙