Как настроить автоматическое удаление просроченных заявок в LearnPress на WordPress

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

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

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

1. Определяем критерии просрочки

Стандартно заявки в LearnPress имеют статус pending или failed, если оплата не прошла. Обычно срок просрочки — 24 часа с момента создания заявки.

2. Создаем функцию очистки в functions.php вашей темы

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

function lp_delete_expired_orders() {
    global $wpdb;
    $expiration_hours = 24; // Время просрочки в часах
    $expiration_date = date('Y-m-d H:i:s', strtotime("-{$expiration_hours} hours"));

    // Получаем ID заказов со статусом pending или failed старше expiration_date
    $orders = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->prefix}posts WHERE post_type = 'lp_order' AND post_status IN ('pending', 'failed') AND post_date < %s",
        $expiration_date
    ));

    if (!empty($orders)) {
        foreach ($orders as $order_id) {
            wp_delete_post($order_id, true); // Полное удаление
        }
    }
}

// Регистрируем cron задачу
add_action('lp_delete_expired_orders_hook', 'lp_delete_expired_orders');

// Запускаем cron при инициализации
if (!wp_next_scheduled('lp_delete_expired_orders_hook')) {
    wp_schedule_event(time(), 'hourly', 'lp_delete_expired_orders_hook');
}

3. Альтернативный вариант: запуск через WP-CLI

Если на вашем сервере есть доступ к WP-CLI, можно запускать скрипт удаления вручную или по cron сервера:

wp eval '
  global $wpdb;
  $expiration_hours = 24;
  $expiration_date = date("Y-m-d H:i:s", strtotime("-{$expiration_hours} hours"));
  $orders = $wpdb->get_col($wpdb->prepare(
    "SELECT ID FROM {$wpdb->prefix}posts WHERE post_type = 'lp_order' AND post_status IN ('pending', 'failed') AND post_date < %s",
    $expiration_date
  ));
  foreach ($orders as $order_id) {
    wp_delete_post($order_id, true);
  }
'

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

  • Создайте тестовую заявку с датой создания старше 24 часов (можно вручную изменить дату в базе данных).
  • Запустите функцию вручную через do_action('lp_delete_expired_orders_hook'); или дождитесь срабатывания cron.
  • Проверьте через админку WordPress или напрямую в базе данных, что заявка удалена.
  • Для дополнительной проверки можно подключить логирование, добавив error_log() внутри цикла удаления.

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

  • Функция не запускается по cron: Проверьте, что WordPress cron работает, и что нет конфликтов с другими плагинами. Можно запустить вручную do_action('lp_delete_expired_orders_hook'); для теста.
  • Заявки не удаляются: Убедитесь, что статусы заявок действительно pending или failed. Возможно, у вас используются кастомные статусы — их нужно добавить в запрос.
  • Удаление заявок влияет на связанные данные: Если есть связи с другими таблицами (например, мета заказы), убедитесь, что wp_delete_post удаляет все связанные данные, или добавьте дополнительный код очистки.
  • Ошибка в SQL запросе: Используйте $wpdb->prepare() для безопасности и правильного формирования запроса.

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

  • Запускайте удаление не чаще раза в час, чтобы не нагружать сервер.
  • Добавьте логирование для мониторинга работы скрипта (например, в отдельный файл через error_log или с использованием плагина для логов).
  • Перед удалением создайте резервную копию базы, особенно если используете принудительное полное удаление.
  • Проверьте совместимость с плагинами кеширования и оптимизации базы, чтобы избежать конфликтов.

Сравнение вариантов реализации очистки просроченных заявок

МетодПлюсыМинусы
WP Cron (код в functions.php)Автоматизация, не требует внешнего доступаЗависит от трафика сайта, возможны задержки
WP-CLI скриптТочный запуск по расписанию сервера, быстроТребует доступа к серверу и навыков работы с WP-CLI
Плагины для очистки базыГотовые решения с интерфейсомМогут быть избыточными, влиять на производительность

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как автоматизировать создание курсов в LearnPress через импорт CSV
08.04.2026
Решение проблемы необновления статуса заказа WooCommerce в LearnPress
21.04.2026
Как добавить уникальный фильтр по статусу заявки в LearnPress
12.04.2026
Как использовать Webhooks в LearnPress для автоматизации процессов
24.02.2026
Как сделать автоматический резерв курсов в LearnPress на WordPress
02.04.2026
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее