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

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

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

Если вы заметили, что в разделе заявок появляются записи со статусом pending или failed, которые висят месяцами, стоит настроить автоматическую очистку.

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

1. Определяем критерии просроченных заявок

Чаще всего заявки считаются просроченными, если со дня создания прошло более 7 дней, а статус остался неоплаченным (pending, failed, cancelled). Можно менять этот срок под свои нужды.

2. Создаем пользовательскую функцию для удаления заявок

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

function lp_delete_expired_orders() {
    global $wpdb;
    $expiration_days = 7;
    $statuses_to_delete = array('pending', 'failed', 'cancelled');
    $cutoff_date = date('Y-m-d H:i:s', strtotime('-' . $expiration_days . ' days'));

    // Получаем ID заказов, старше cutoff_date и с нужным статусом
    $orders = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} 
         WHERE post_type = 'lp_order' 
         AND post_status IN (%s, %s, %s) 
         AND post_date < %s",
        $statuses_to_delete[0], $statuses_to_delete[1], $statuses_to_delete[2], $cutoff_date
    ));

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

3. Регистрируем задачу по Cron для регулярного запуска

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

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

add_action('lp_delete_expired_orders_cron', 'lp_delete_expired_orders');

4. Очистка при деактивации

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

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

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

  • Убедитесь, что в базе появляются заявки с нужным статусом и датой более 7 дней назад.
  • Запустите cron вручную через WP-CLI для теста: wp cron event run lp_delete_expired_orders_cron
  • Проверьте, что заявки удалились из раздела заказов LearnPress.
  • Подключите плагин Clearfy Pro для мониторинга и оптимизации базы данных, если часто удаляете заявки.

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

  • Задача cron не запускается: Проверьте, что WP-Cron работает, и нет блокировок со стороны сервера. Можно настроить системный cron для вызова WP-Cron.
  • Неправильные статусы заявок: Убедитесь, что статусы в массиве $statuses_to_delete соответствуют тем, которые используются LearnPress. Иногда статусы кастомизируются в вашей установке.
  • Удаляются нужные заявки: Проверьте дату и статус перед удалением, добавьте логирование для контроля, например, через error_log().
  • Ошибка доступа к базе данных: Проверьте правильность запроса и права пользователя базы данных.

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

  • Удаляйте записи с помощью wp_delete_post($order_id, true), чтобы избежать «мягких» удалений и не накапливать мусор.
  • Добавьте логирование удалений с помощью error_log() или специализированного плагина, чтобы быстро диагностировать проблемы.
  • Регулярно очищайте базу через WP-CLI, если у вас большой объем данных, чтобы не нагружать сайт.
  • Для оптимизации запросов можно добавить индекс по post_status и post_date в таблице wp_posts, если это актуально.
  • При необходимости расширьте функционал, добавив уведомление администратору о количестве удаленных заявок.

Сравнение вариантов автоматического удаления заявок

Метод Плюсы Минусы Компромисс
Код PHP + WP-Cron (как в статье) Легко настраивается, не требует плагинов, гибкость Зависит от WP-Cron, требует базовых знаний PHP Оптимально для разработчиков с доступом к коду
Плагины для очистки базы (например, Clearfy Pro) Простота использования, дополнительные функции оптимизации Может быть избыточным, платные опции Для тех, кто хочет минимизировать кодинг
Ручное удаление через админку Безопасно, контролируемо Трудоемко, неэффективно при большом количестве заявок Подходит для малых сайтов

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

⭐⭐⭐⭐⭐
Решение проблемы неотображения курса после оплаты в WooCommerce с LearnPress
06.06.2026
Как запустить и настроить локализацию LearnPress на WordPress
21.03.2026
Как создать собственный тип вопроса для Quizle в LearnPress
15.03.2026
Как создать собственный виджет для LearnPress в WordPress
03.12.2025
Как добавить авторизацию по OTP в LearnPress с применением WooCommerce
24.05.2026
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее