LearnPress — один из самых популярных плагинов для создания онлайн-курсов на WordPress. Несмотря на богатый функционал, стандартная структура курсов в LearnPress не предусматривает использования разделов или глав внутри курса, что затрудняет создание хорошо организованных и структурированных учебных материалов. В этой статье мы подробно разберём, как добавить поддержку разделов в курсах LearnPress с помощью кода и подходящих решений, чтобы улучшить навигацию и восприятие курса учащимися.
Почему нужны разделы в курсах LearnPress
Стандартный курс LearnPress состоит из набора уроков и тестов, которые идут подряд без дополнительной группировки. В больших курсах это создаёт неудобства:
- Отсутствие логической структуры и навигации по темам;
- Сложность в управлении содержимым и его обновлении;
- Плохой пользовательский опыт для студентов, которые хотят быстро найти нужную часть курса.
Добавление разделов поможет структурировать курс на более мелкие логические блоки с подзаголовками и описаниями, что повысит удобство и понятность обучения.
Подходы к добавлению разделов в LearnPress
Для реализации разделов в LearnPress можно использовать несколько методов:
1. Создание кастомного типа записи "Раздел" и связывание с уроками
Можно зарегистрировать новый тип записи — "Раздел" — и связать его с уроками через метаполя или таксономии. Это позволит вручную группировать уроки внутри разделов. Однако потребуется дополнительный код для отображения разделов на странице курса.
2. Использование метаполей и фильтров LearnPress
LearnPress поддерживает хуки, с помощью которых можно добавлять дополнительную логику. Например, можно добавить метаполе для урока, в котором будет указано, к какому разделу он относится, и при выводе курса сгруппировать уроки по этим значениям.
3. Использование сторонних плагинов для таксономий и структурирования
Некоторые плагины позволяют создавать вложенные таксономии или группы для кастомных типов записей. Их можно адаптировать для LearnPress, но это менее гибко и требует проверки совместимости.
В этой статье рассмотрим реализацию на основе метода 2, так как он наиболее универсален и не требует изменения базы данных.
Добавление метаполя раздела к урокам LearnPress
Для начала добавим поле выбора раздела в админке при редактировании урока. Для этого используем хук learn_press_lesson_meta_box_fields, который позволяет добавить свои поля.
add_filter('learn_press_lesson_meta_box_fields', 'learnpress_add_section_field_to_lesson', 10, 2);
function learnpress_add_section_field_to_lesson($fields, $post) {
$fields['section'] = array(
'title' => 'Раздел курса',
'type' => 'select',
'options' => array(
'' => 'Без раздела',
'intro' => 'Введение',
'basics' => 'Основы',
'advanced' => 'Продвинутый уровень'
),
'default' => '',
);
return $fields;
}
Этот код добавляет выпадающий список с предопределёнными разделами. Для реального проекта список разделов можно хранить динамически, например, в настройках курса или отдельной опции.
Сохранение и вывод разделов на странице курса
LearnPress автоматически сохраняет метаполя, добавленные через learn_press_lesson_meta_box_fields. Теперь нужно отобразить уроки, сгруппировав их по разделам.
Для этого переопределим шаблон списка уроков или воспользуемся хуком learn-press/course-section-content, добавив группировку в вывод.
add_filter('learn-press/course-section-content', 'learnpress_group_lessons_by_section', 10, 2);
function learnpress_group_lessons_by_section($content, $course_id) {
$lessons = learn_press_get_course_lessons($course_id);
$grouped = [];
foreach ($lessons as $lesson) {
$section = get_post_meta($lesson->ID, '_lp_section', true) ?: 'no_section';
if (!isset($grouped[$section])) {
$grouped[$section] = [];
}
$grouped[$section][] = $lesson;
}
$output = '';
foreach ($grouped as $section_key => $lessons_group) {
$section_title = '';
switch ($section_key) {
case 'intro': $section_title = 'Введение'; break;
case 'basics': $section_title = 'Основы'; break;
case 'advanced': $section_title = 'Продвинутый уровень'; break;
default: $section_title = 'Без раздела';
}
$output .= '<h3>' . esc_html($section_title) . '</h3><ul>';
foreach ($lessons_group as $lesson) {
$output .= '<li><a href="' . get_permalink($lesson->ID) . '">' . get_the_title($lesson->ID) . '</a></li>';
}
$output .= '</ul>';
}
return $output;
}
Этот код собирает уроки курса, группирует их по значению метаполя "_lp_section" и выводит заголовки разделов с вложенными списками уроков.
Улучшение: динамическое создание разделов и интеграция с настройками курса
Для удобства администраторов можно реализовать страницу настроек курса, где они смогут добавлять и редактировать разделы, а затем использовать эти данные для формирования списка в метаполе урока. Например, использовать опции WordPress с префиксом курса или пользовательские таблицы.
Также можно доработать фронтенд, добавив якоря и меню разделов для быстрого перехода, улучшить стилизацию и адаптивность.
Полезные плагины для организации контента LearnPress
Для расширения функционала курсов можно рассмотреть плагины из WPShop.ru, которые помогут создавать викторины, опросы, видеоуроки и другие элементы, способствующие структурированному обучению.
Например, Quizle для создания интерактивных тестов, OmniVideo для удобного размещения видеоуроков, а также темы Reboot и Root с улучшенной навигацией и визуальной структурой курсов.