Как добавить комплексную оценку учащихся в LearnPress

Что такое комплексная оценка в LearnPress и зачем она нужна

Стандартный функционал LearnPress позволяет оценивать выполнение отдельных уроков и тестов, но не предоставляет средств для подсчёта комплексной оценки по курсу с учетом разных критериев. В реальных проектах требуется учитывать не только баллы за тесты, но и активность, выполнение заданий и прочие параметры для формирования итоговой оценки учащегося.

Диагностика: почему стандартный рейтинг LearnPress не подходит

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

Что проверить перед началом

  • Установлен ли плагин LearnPress последней версии.
  • Активированы ли все необходимые аддоны для тестов и заданий.
  • Работает ли система пользовательских метаданных в WordPress.

Пошаговое решение: реализация комплексной оценки

1. Создаём пользовательское поле для хранения оценки

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

function lp_save_course_score($user_id, $course_id, $score) {
    update_user_meta($user_id, 'lp_course_score_' . $course_id, floatval($score));
}

2. Вычисляем итоговую оценку по курсу

Подсчёт можно делать, например, как среднее арифметическое баллов за все тесты и задания. Для этого используем хук после завершения урока или теста:

add_action('learn-press/quiz/finished', 'lp_recalculate_course_score', 10, 3);

function lp_recalculate_course_score($quiz_id, $user_id, $results) {
    $course_id = lp_get_course_id_by_quiz($quiz_id);
    if (!$course_id) return;

    $quiz_scores = lp_get_all_quiz_scores($user_id, $course_id);
    $assignment_scores = lp_get_all_assignment_scores($user_id, $course_id);

    $total_scores = array_merge($quiz_scores, $assignment_scores);
    if (count($total_scores) === 0) return;

    $average = array_sum($total_scores) / count($total_scores);
    lp_save_course_score($user_id, $course_id, $average);
}

Функции lp_get_course_id_by_quiz, lp_get_all_quiz_scores и lp_get_all_assignment_scores нужно реализовать, ориентируясь на структуру данных вашего сайта и LearnPress.

3. Выводим оценку на странице профиля и курса

Добавим отображение оценки в шаблон профиля пользователя и на страницу курса:

function lp_show_course_score($user_id, $course_id) {
    $score = get_user_meta($user_id, 'lp_course_score_' . $course_id, true);
    if ($score === '') {
        echo '<p>Оценка пока не выставлена.</p>';
    } else {
        echo '<p>Итоговая оценка: <strong>' . esc_html(number_format($score, 2)) . '</strong></p>';
    }
}

Вызывайте эту функцию в нужных местах шаблонов, например, в profile.php и single-lp_course.php.

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

  • Пройдите тест или выполните задание как ученик.
  • Убедитесь, что данные о баллах сохраняются.
  • Проверьте, что итоговая оценка пересчитывается и сохраняется в метаданных пользователя.
  • Отобразите профиль пользователя — итоговая оценка должна корректно выводиться.

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

  • Итоговая оценка не сохраняется: проверьте правильность вызова update_user_meta и доступ к ID пользователя и курса.
  • Хуки не срабатывают: убедитесь, что используете правильные хуки LearnPress и что они подключены в активном окружении.
  • Ошибки при получении данных: проверьте, что функции для получения ID курса по тесту и получения баллов реализованы аккуратно и возвращают корректные данные.
  • Оценка не отображается: проверьте, что функция вывода вызывается в нужном шаблоне и нет конфликтов с другими плагинами.

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

  • Обязательно проверяйте права пользователя при сохранении и выводе данных.
  • Для больших баз данных используйте кеширование метаданных, чтобы снизить нагрузку.
  • Оптимизируйте выборки по баллам, не загружайте все данные, если можно обработать через SQL-запросы с агрегатными функциями.
  • Для хранения оценок используйте floatval, чтобы избежать проблем с типами данных.

Чек-лист реализации комплексной оценки в LearnPress

  1. Определить структуру оценки (тесты, задания и др.).
  2. Реализовать функции получения баллов по каждому элементу курса.
  3. Подключить хуки для перезаписи итогового результата после каждого изменения.
  4. Сохранить итоговую оценку в пользовательских метаданных.
  5. Добавить вывод оценки в профиле и странице курса.
  6. Проверить все этапы на тестовом пользователе.
  7. Оптимизировать код и добавить проверки безопасности.

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

⭐⭐⭐⭐⭐
Как настроить синхронизацию статусов заказов WooCommerce и LearnPress при использовании различных платежных систем
13.07.2026
Как создать свой шорткод в LearnPress для расширения функционала
09.11.2025
Как установить и настроить OmniVideo для LearnPress: пошаговое руководство
27.01.2026
Как сделать отсрочку просмотра уроков в LearnPress: практическое решение
18.03.2026
Как решить проблему неотображения последних пройденных уроков в LearnPress
09.07.2026
×
Сделай свой сайт крутым!

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

Выбрать плагин сейчас ⋙