Диагностика проблемы с отображением пройденных уроков в LearnPress
Пользователи обучающих платформ на WordPress с LearnPress иногда сталкиваются с ситуацией, когда в профиле ученика или на странице курса не отображаются последние пройденные уроки. Это затрудняет контроль прогресса и снижает качество UX. Основные причины:
- Кэширование данных прогресса в базе или на стороне клиента не обновляется;
- Проблемы с метаданными пользователя или урока;
- Конфликты с темой или сторонними плагинами, влияющими на отображение;
- Ошибки в AJAX-запросах, которые подгружают список уроков;
- Неправильная регистрация статусов уроков после прохождения.
Пошаговое решение проблемы
1. Проверяем, фиксируется ли факт прохождения урока
В базе данных в таблице wp_learnpress_user_items проверяем, есть ли записи с user_id и item_id урока, а также статусом completed. Можно использовать запрос:
SELECT * FROM wp_learnpress_user_items WHERE user_id = 123 AND status = 'completed' ORDER BY updated_at DESC LIMIT 5;Если записи отсутствуют, значит LearnPress не сохраняет прогресс. В этом случае нужно проверить JavaScript консоль браузера на ошибки и логи сервера.
2. Отключаем кэширование и проверяем AJAX-запросы
Временно отключите все плагины кэширования (WP Super Cache, W3 Total Cache и др.) и CDN. Затем на странице курса откройте инструменты разработчика (F12) в браузере, перейдите во вкладку Network, найдите запросы, связанные с LearnPress (обычно AJAX-запросы с параметром learn_press) и проверьте ответы сервера на наличие ошибок.
3. Используем кастомный код для принудительного обновления статусов уроков
Иногда LearnPress не обновляет статус урока, если урок не полностью пройден по его логике. Добавьте следующий код в файл functions.php вашей дочерней темы или в кастомный плагин:
add_action('learn_press_lesson_completed', 'force_update_lesson_status', 10, 2);
function force_update_lesson_status($lesson_id, $user_id) {
if ( ! $lesson_id || ! $user_id ) {
return;
}
// Обновляем метаданные урока
update_user_meta($user_id, 'lp_last_completed_lesson', $lesson_id);
// Обновляем статус в базе LearnPress вручную
LP_User_Items::update_item_status($user_id, $lesson_id, 'completed');
}Этот код обеспечит запись статуса в базе и обновит метаданные для быстрого доступа.
Проверка результата после внедрения
- Пройдите урок под тестовым аккаунтом;
- Обновите страницу профиля и страницы курса;
- Проверьте, отображается ли последний пройденный урок в разделе прогресса;
- Повторно выполните SQL-запрос, чтобы убедиться, что в базе появились новые записи со статусом
completed; - Проверьте консоль браузера на отсутствие ошибок JavaScript и успешные AJAX-запросы.
Частые ошибки и их исправление
- Ошибка: Статусы уроков не обновляются, а записи в базе не создаются.
Причина: Конфликт с плагином кеширования или неправильное событие JS.
Исправление: Отключите кеш, проверьте консоль, обновите LearnPress до последней версии. - Ошибка: Прогресс отображается, но не обновляется сразу после прохождения урока.
Причина: Кэш браузера или плагина.
Исправление: Очистите кэш, настройте исключения для AJAX-запросов. - Ошибка: Пользователь видит неправильный прогресс.
Причина: Кастомные фильтры или хуки, меняющие логику записи статусов.
Исправление: Проверьте кастомный код по хукамlearn_press_lesson_completed, временно отключите сторонние расширения.
Практические советы по оптимизации и безопасности
- Для ускорения работы используйте объектный кэш Redis или Memcached для хранения метаданных прогресса.
- Регулярно очищайте устаревшие данные прогресса, если пользователь удаляет курсы, чтобы база не разрасталась.
- Обязательно используйте nonce-проверки для AJAX-запросов LearnPress, чтобы предотвратить CSRF-атаки.
- Логируйте ошибки PHP и JS, чтобы своевременно отслеживать сбои в обновлении статусов.
- Используйте WP CLI для массовой проверки и коррекции статусов уроков, если база «зависла».
Сравнение методов решения проблемы
| Метод | Плюсы | Минусы | Пример использования |
|---|---|---|---|
| Отключение кэша | Простое и быстрое устранение конфликтов | Временное, снижает производительность | Отключить плагин кэширования |
| Кастомный код с хуком | Гарантированное обновление статуса, расширяемость | Требует навыков PHP и тестирования | Пример в статье (код с learn_press_lesson_completed) |
| Диагностика AJAX и JS | Выявляет скрытые ошибки, помогает точечно исправлять | Требует времени и знаний JS | Инструменты разработчика браузера |