Как разрешить повторное прохождение курса в LearnPress

Проблема: невозможность повторного прохождения курса в LearnPress

По умолчанию LearnPress не позволяет учащимся пройти курс повторно после его успешного завершения. Это создает неудобства, если студент хочет освежить знания или пересмотреть материал с нуля. Как исправить это ограничение и разрешить повторное прохождение курса?

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

Убедитесь, что курс после завершения блокируется для повторного прохождения:

  • Зайдите под аккаунтом ученика и пройдите курс до конца.
  • Попробуйте заново стартовать тот же курс.
  • Если кнопка «Начать курс» отсутствует, либо курс автоматически открывается с последнего пройденного урока, значит повторное прохождение запрещено.

Это поведение связано с внутренней логикой LearnPress, где завершённый курс фиксируется в мета данных пользователя и не позволяет заново стартовать.

Пошаговое решение: разрешаем повторный старт курса

1. Сброс статуса курса после завершения

Добавим код, который позволит сбросить статус завершения курса, тем самым открывая возможность пройти курс заново.

add_action('template_redirect', function() {
    if (is_singular('lp_course') && is_user_logged_in()) {
        $user_id = get_current_user_id();
        $course_id = get_the_ID();
        $user_course = LP_User_Course::get_user_course($course_id, $user_id);
        if ($user_course && $user_course->has_finished()) {
            // Сбрасываем статус завершения
            $user_course->reset();
        }
    }
});

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

2. Добавление кнопки для повторного прохождения курса

Более гибкий способ — добавить кнопку сброса статуса курса для пользователя:

add_shortcode('lp_reset_course', function() {
    if (!is_user_logged_in() || !is_singular('lp_course')) {
        return '';
    }
    $user_id = get_current_user_id();
    global $post;
    $course_id = $post->ID;
    if (isset($_POST['lp_reset_course'])) {
        $user_course = LP_User_Course::get_user_course($course_id, $user_id);
        if ($user_course) {
            $user_course->reset();
            echo '<div class="notice success">Курс успешно сброшен. Вы можете пройти его заново.</div>';
        }
    }
    return '<form method="post"><button type="submit" name="lp_reset_course">Пройти курс заново</button></form>';
});

Добавьте шорткод [lp_reset_course] в описание курса или на отдельную страницу.

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

  • Пройдите курс от имени тестового пользователя.
  • После завершения зайдите на страницу курса.
  • Появится кнопка «Пройти курс заново».
  • Нажмите кнопку, статус курса сбросится.
  • Теперь можно начать курс с начала и пройти заново.

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

  • Кнопка не отображается: Проверьте, что вы добавили шорткод в нужное место и что пользователь авторизован.
  • Статус не сбрасывается: Убедитесь, что класс LP_User_Course доступен (плагин LearnPress активен).
  • Курс автоматически начинается с последнего урока: Возможно, кэширует браузер или сервер, очистите кэш.

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

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

Таблица сравнения вариантов решения

МетодПлюсыМинусыРекомендации
Автоматический сброс при заходеПростота, не требует действий пользователяНагрузка на сервер, неудобно для постоянных пользователейИспользовать только на небольших сайтах
Кнопка сброса (через шорткод)Контроль пользователя, меньше нагрузкиТребует взаимодействия пользователяОптимальный вариант для большинства

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

⭐⭐⭐⭐⭐
Как добавить рейтинг и отзывы к курсам в LearnPress на WordPress
17.12.2025
Как добавить разделы в курсах LearnPress: практическое руководство с примерами кода
10.02.2026
Решение проблемы несинхронизированных статусов заказов WooCommerce и LearnPress
25.04.2026
Как создать уникальные проверки в Quizle для LearnPress: практические примеры и код
20.01.2026
Как автоматизировать удаление просроченных заявок в LearnPress на WordPress
09.06.2026
×
Прокачай свой WordPress!

Скидка -20% на премиум темы и плагины

Воспользоваться сейчас ⋙