Как добавить независимые виды учебных материалов в LearnPress

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

Почему нужны независимые виды учебных материалов в LearnPress

Стандартные уроки и тесты подходят не для всех сценариев обучения. Иногда требуется добавить дополнительные типы контента: рабочие задания, видео-лекции с особой разметкой, презентации, дополнительные материалы для скачивания, интерактивные элементы. Если их реализовать в рамках уроков, страдает удобство и семантика.

Независимые типы учебных материалов позволяют:

  • Четко структурировать контент курса;
  • Добавлять уникальные поля и логику для каждого типа;
  • Управлять отображением и доступом к материалам;
  • Облегчить создание и поддержку курсов.

Как создать новый тип учебного материала в LearnPress (Custom Post Type)

В LearnPress учебные материалы — это CPT (Custom Post Type) с базовой логикой. Чтобы добавить новый тип, нужно зарегистрировать собственный CPT и интегрировать его в систему курсов.

Пример регистрации нового CPT lp_resource для дополнительных ресурсов:

function learnpress_ru_register_resource_cpt() {
    $labels = array(
        'name' => 'Ресурсы',
        'singular_name' => 'Ресурс',
        'menu_name' => 'Ресурсы',
        'add_new' => 'Добавить ресурс',
        'add_new_item' => 'Добавить новый ресурс',
        'edit_item' => 'Редактировать ресурс',
        'new_item' => 'Новый ресурс',
        'view_item' => 'Просмотр ресурса',
        'search_items' => 'Поиск ресурсов',
        'not_found' => 'Ресурсы не найдены',
        'not_found_in_trash' => 'В корзине ресурсов не найдено'
    );
    $args = array(
        'labels' => $labels,
        'public' => true,
        'show_ui' => true,
        'capability_type' => 'lp_resource',
        'map_meta_cap' => true,
        'hierarchical' => false,
        'menu_position' => 20,
        'supports' => array('title', 'editor', 'thumbnail'),
        'has_archive' => false,
        'show_in_menu' => 'learn_press'
    );
    register_post_type('lp_resource', $args);
}
add_action('init', 'learnpress_ru_register_resource_cpt');

Этот код создаст в админке LearnPress новый тип материалов «Ресурсы».

Интеграция нового типа материала в структуру курса LearnPress

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

LearnPress хранит структуру курса в метаполях заказа и уроков. Добавим связь ресурса с курсом через метаполе:

function learnpress_ru_save_resource_course_link($post_id) {
    if (get_post_type($post_id) != 'lp_resource') return;
    if (!empty($_POST['course_id'])) {
        update_post_meta($post_id, '_lp_course_id', absint($_POST['course_id']));
    }
}
add_action('save_post', 'learnpress_ru_save_resource_course_link');

На странице редактирования ресурса добавим селектор курса через метабокс, чтобы связать ресурс с нужным курсом.

Вывод новых материалов на странице курса

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

function learnpress_ru_show_resources_in_course($course_id) {
    $args = array(
        'post_type' => 'lp_resource',
        'meta_key' => '_lp_course_id',
        'meta_value' => $course_id,
        'posts_per_page' => -1
    );
    $resources = get_posts($args);
    if ($resources) {
        echo '<h3>Дополнительные ресурсы</h3><ul>';
        foreach ($resources as $resource) {
            echo '<li><a href="'.get_permalink($resource->ID).'">'.esc_html($resource->post_title).'</a></li>';
        }
        echo '</ul>';
    }
}
add_action('learn_press_after_sections', 'learnpress_ru_show_resources_in_course');

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

Использование плагина Quizle для создания интерактивных заданий как отдельного типа материала

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

Пример добавления нового типа вопроса для Quizle:

function learnpress_ru_quizle_custom_question_types($types) {
    $types['resource_assignment'] = __('Задание-ресурс', 'learnpress-ru');
    return $types;
}
add_filter('quizle_question_types', 'learnpress_ru_quizle_custom_question_types');

После этого можно создавать задания с уникальной логикой и отображением.

Советы по безопасности и производительности при добавлении новых типов материалов

При добавлении новых CPT и связей важно:

  • Правильно настроить права доступа (capabilities) для новых типов, чтобы не допустить несанкционированных изменений.
  • Оптимизировать запросы для вывода материалов, используя кэширование (например, Transients API) для снижения нагрузки.
  • Обеспечить совместимость с темами и другими плагинами, особенно если используете кастомные шаблоны для вывода материалов.

Также, если на сайте много учебных материалов, стоит рассмотреть использование плагина Clearfy Pro для оптимизации производительности.

Пример комплексного решения: создание типа 'Задание' с загрузкой файлов и проверкой

Создадим CPT lp_assignment с метаполями для загрузки файлов и проверкой преподавателем.

function learnpress_ru_register_assignment_cpt() {
    $labels = array(
        'name' => 'Задания',
        'singular_name' => 'Задание',
        'menu_name' => 'Задания'
    );
    $args = array(
        'labels' => $labels,
        'public' => true,
        'supports' => array('title', 'editor'),
        'show_in_menu' => 'learn_press'
    );
    register_post_type('lp_assignment', $args);
}
add_action('init', 'learnpress_ru_register_assignment_cpt');

// Добавление метабокса для загрузки файлов
function learnpress_ru_assignment_meta_box() {
    add_meta_box('lp_assignment_files', 'Файлы задания', 'learnpress_ru_assignment_files_cb', 'lp_assignment', 'normal', 'high');
}
add_action('add_meta_boxes', 'learnpress_ru_assignment_meta_box');

function learnpress_ru_assignment_files_cb($post) {
    wp_nonce_field('learnpress_ru_save_assignment_files', 'learnpress_ru_assignment_files_nonce');
    $files = get_post_meta($post->ID, '_lp_assignment_files', true);
    echo '<input type="file" name="lp_assignment_files[]" multiple />';
    if ($files) {
        echo '<ul>';
        foreach ($files as $file) {
            echo '<li><a href="'.esc_url($file).'" target="_blank">'.basename($file).'</a></li>';
        }
        echo '</ul>';
    }
}

// Сохранение файлов
function learnpress_ru_save_assignment_files($post_id) {
    if (!isset($_POST['learnpress_ru_assignment_files_nonce']) || !wp_verify_nonce($_POST['learnpress_ru_assignment_files_nonce'], 'learnpress_ru_save_assignment_files')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
    if (!current_user_can('edit_post', $post_id)) return;

    if (!empty($_FILES['lp_assignment_files']['name'][0])) {
        $files = array();
        $file_count = count($_FILES['lp_assignment_files']['name']);
        for ($i = 0; $i < $file_count; $i++) {
            if ($_FILES['lp_assignment_files']['error'][$i] == 0) {
                $upload = wp_handle_upload(array(
                    'name' => $_FILES['lp_assignment_files']['name'][$i],
                    'type' => $_FILES['lp_assignment_files']['type'][$i],
                    'tmp_name' => $_FILES['lp_assignment_files']['tmp_name'][$i],
                    'error' => $_FILES['lp_assignment_files']['error'][$i],
                    'size' => $_FILES['lp_assignment_files']['size'][$i]
                ), array('test_form' => false));
                if (!isset($upload['error'])) {
                    $files[] = $upload['url'];
                }
            }
        }
        update_post_meta($post_id, '_lp_assignment_files', $files);
    }
}
add_action('save_post_lp_assignment', 'learnpress_ru_save_assignment_files');

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

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

⭐⭐⭐⭐⭐
Как автоматизировать создание учебных материалов в LearnPress с помощью плагинов и кода
20.12.2025
Как создать свой шорткод в LearnPress для расширения функционала
09.11.2025
Как создать собственный виджет для LearnPress в WordPress
03.12.2025
Как добавить платежные системы в LearnPress для приема оплат на сайте
08.03.2026
Решение проблемы неотображения корзины WooCommerce при интеграции с LearnPress
15.05.2026
×
Quizle
Привлекайте, конвертируйте, зарабатывайте!
-15%

на премиум плагин WordPress

Получить скидку ⋙