wpgenerate.ru wordpress wpgenerate.ru

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

Диагностика проблемы с неактивными заказами в WooCommerce

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

SELECT COUNT(ID) AS count, post_status FROM wp_posts WHERE post_type = 'shop_order' AND post_status IN ('wc-pending', 'wc-processing') GROUP BY post_status;

Если количество заказов с устаревшими статусами превышает несколько сотен и большинство из них старше 30 дней, стоит приступить к автоматическому удалению.

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

1. Создание функции удаления заказов

Добавьте следующий код в файл functions.php вашей дочерней темы или в кастомный плагин:

function wc_delete_old_unpaid_orders() {
    global $wpdb;
    // Удаляем заказы со статусом pending или failed, старше 30 дней
    $date_threshold = date('Y-m-d H:i:s', strtotime('-30 days'));

    // Получаем ID заказов
    $order_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'shop_order' AND post_status IN ('wc-pending', 'wc-failed') AND post_date < %s",
        $date_threshold
    ));

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

2. Запуск функции по расписанию с помощью WP-Cron

Чтобы автоматизировать задачу, зарегистрируйте событие в WP-Cron, которое будет запускаться, например, раз в сутки:

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

add_action('wc_daily_old_orders_cleanup', 'wc_delete_old_unpaid_orders');

3. Удаление задачи при деактивации

Не забудьте очистить расписание при отключении плагина или удалении кода:

function wc_remove_old_orders_cleanup_schedule() {
    $timestamp = wp_next_scheduled('wc_daily_old_orders_cleanup');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wc_daily_old_orders_cleanup');
    }
}
register_deactivation_hook(__FILE__, 'wc_remove_old_orders_cleanup_schedule');

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

Для проверки:

  • Запустите функцию вручную через WP-CLI: wp eval 'wc_delete_old_unpaid_orders();'
  • Проверьте в админке WooCommerce количество заказов со статусом pending и failed старше 30 дней — они должны исчезнуть.
  • Мониторьте базу данных с помощью запросов, приведённых выше — количество старых заказов должно уменьшиться.

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

  • Удаление не тех заказов. Проверьте, что в условии post_status указаны только нужные статусы. Ошибка приводит к удалению активных заказов.
  • Функция не запускается по расписанию. Убедитесь, что WP-Cron работает (например, посетите сайт или настройте системный cron-запуск).
  • Память или время выполнения PHP ограничены. При большом количестве заказов добавляйте лимиты и используйте пакетную обработку.

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

  • Используйте wp_delete_post($order_id, true) для полного удаления, но будьте осторожны — восстановить данные будет невозможно.
  • Если заказов очень много, реализуйте пакетную обработку с лимитом по количеству удаляемых заказов за один запуск, чтобы избежать таймаутов.
  • Регулярно создавайте резервные копии перед массовым удалением.
  • Отключайте WP-Cron и используйте системный cron для стабильной работы планировщика.

Сравнение подходов: плагин vs код vs комбинированный метод

МетодПлюсыМинусыРекомендации
Плагин (например, Clearfy Pro) Простота настройки, UI, дополнительные функции оптимизации Может грузить сайт, лишние функции, зависимость от обновлений Подходит для пользователей без опыта кода
Код в functions.php или плагине Полный контроль, легковесность, без лишних зависимостей Требует навыков, возможны ошибки, сложность отладки Лучше для разработчиков и кастомных решений
Комбинированный метод (код + плагин) Гибкость, возможность расширения, автоматизация Сложность поддержки, потенциальные конфликты Оптимален для сложных проектов с частыми изменениями
×

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

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

пишет статьи

готовит SEO

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

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