wpload.ru wordpress WPLoad.ru

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

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

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

Типичные сценарии:

  • Удаление отменённых заказов старше 30 дней.
  • Удаление просроченных заказов с неоплаченным статусом.
  • Автоматическая очистка тестовых заказов после отладки магазина.

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

1. Добавление регулярного CRON-задачи для очистки заказов

В functions.php вашей темы или в кастомном плагине добавьте следующий код для регистрации события, которое будет запускаться ежедневно:

if (!wp_next_scheduled('custom_delete_old_wc_orders')) {
    wp_schedule_event(time(), 'daily', 'custom_delete_old_wc_orders');
}

2. Основная функция удаления заказов

Создайте функцию, которая будет искать и удалять заказы с конкретным статусом и старше заданного количества дней. Пример ниже удаляет заказы со статусом "cancelled" старше 30 дней.

function custom_delete_old_wc_orders() {
    $days = 30; // Количество дней
    $date = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $args = array(
        'limit' => -1,
        'status' => 'cancelled',
        'date_created' => '<' . $date,
        'return' => 'ids',
    );

    $orders = wc_get_orders($args);

    if (!empty($orders)) {
        foreach ($orders as $order_id) {
            wp_delete_post($order_id, true); // true — удаление без возможности восстановления
        }
    }
}

add_action('custom_delete_old_wc_orders', 'custom_delete_old_wc_orders');

3. Запуск функции вручную для теста

Для проверки работы функции вызовите её один раз вручную (например, через admin_init):

add_action('admin_init', function() {
    if (current_user_can('manage_woocommerce') && isset($_GET['run_delete_orders'])) {
        custom_delete_old_wc_orders();
        wp_die('Удаление заказов выполнено.');
    }
});

После добавления этого кода перейдите по ссылке https://ваш-сайт/admin/?run_delete_orders=1 под админом, чтобы запустить удаление.

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

  • В админке WooCommerce перейдите в раздел «Заказы» и отфильтруйте по статусу "отменённые".
  • Проверьте, что заказы старше 30 дней удалены.
  • В базе данных (таблица wp_posts, тип shop_order) убедитесь, что нужные заказы отсутствуют.
  • Для контроля можно временно добавить логирование в функцию:
error_log('Удалён заказ ID: ' . $order_id);

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

  • Заказы не удаляются: Проверьте, что статус заказа указан правильно. Для проверки статусов используйте wc_get_order_statuses().
  • CRON-задача не запускается: Убедитесь, что WP-Cron работает. Для диагностики можно использовать плагин WP Crontrol.
  • Удаление не полное: wp_delete_post с параметром true удаляет пост полностью. Если заказ остаётся в базе, проверьте наличие плагинов, которые блокируют удаление.
  • Проблемы с правами доступа: Функция удаления должна запускаться от имени пользователя с правами администратора или через CRON без ограничений.

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

  • Удаление большого количества заказов за один раз может привести к таймауту. Рекомендуется реализовать пакетную обработку (порциями по 50-100 заказов).
  • Регулярно создавайте резервные копии базы данных перед массовыми изменениями.
  • Для повышения производительности используйте WP CLI команду для удаления заказов, если доступна серверная консоль:
wp post delete $(wp post list --post_type=shop_order --post_status=cancelled --date_query_column=post_date --date_query_before='30 days ago' --format=ids) --force
  • Если вы используете плагин Clearfy Pro от WPSHOP, он может помочь с очисткой базы и удалением неиспользуемых данных, интегрируя ваш процесс удаления заказов.

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

МетодПреимуществаНедостатки
Код в functions.php + WP-CronГибкость, автоматизация, не требует плагиновНужно тестировать, возможны ошибки при большом объёме
WP CLIОчень быстрое удаление, подходит для больших объёмовТребует доступа к серверу и знаний консоли
Плагин для очистки базы (например, Clearfy Pro)Удобство, дополнительные функции оптимизацииПлатные решения, меньшая гибкость в кастомизации
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше