Как сделать отсрочку просмотра уроков в LearnPress

Отсрочка просмотра уроков — востребованная функция для образовательных платформ на LearnPress, которая позволяет контролировать доступ студентов к материалам курса по времени. Такая задержка помогает стимулировать регулярное обучение и уменьшить возможность быстрого прохождения курса без усвоения материала.

Зачем нужна отсрочка просмотра уроков в LearnPress

В стандартном LearnPress все уроки становятся доступны сразу после покупки или подписки на курс. Но в ряде случаев важно ограничить доступ к урокам, например, открывать следующий урок только через определённое время после предыдущего. Это позволяет:

  • Стимулировать систематическое обучение;
  • Контролировать скорость прохождения курса;
  • Улучшить усвоение знаний;
  • Создать эффект живого курса с расписанием.

Реализация такой функции требует вмешательства в логику LearnPress, так как в базовом функционале её нет. Рассмотрим, как можно сделать отсрочку просмотра уроков с помощью кастомного плагина и примеров кода.

Как реализовать отсрочку просмотра уроков через плагин

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

Создаем структуру плагина

Создайте папку learnpress-lesson-delay в каталоге wp-content/plugins и файл learnpress-lesson-delay.php с таким содержанием:

<?php
/*
Plugin Name: LearnPress Lesson Delay
Description: Отсрочка просмотра уроков в LearnPress по времени
Version: 1.0
Author: learnpress.ru
*/

// Подключение функций
include_once dirname(__FILE__) . '/includes/lesson-delay-functions.php';

В папке includes создайте файл lesson-delay-functions.php, где напишем основную логику.

Основная логика контроля доступа к урокам

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

<?php

// Хук для проверки доступа к уроку
add_filter('learn-press/user-can-view-item', 'learnpressru_user_can_view_item_delay', 10, 3);

function learnpressru_user_can_view_item_delay($can_view, $item, $user_id) {
    // Проверяем, что это урок
    if ($item->get_type() !== 'lp_lesson') {
        return $can_view;
    }

    $course_id = $item->get_course()->get_id();

    // Время задержки в днях между уроками
    $delay_days = 2; // Можно вынести в настройки плагина

    // Получаем список уроков курса и их порядок
    $course_items = learn_press_get_course_items($course_id, 'lp_lesson');
    $lesson_ids = wp_list_pluck($course_items, 'ID');

    // Текущий урок индекс
    $current_index = array_search($item->get_id(), $lesson_ids);

    if ($current_index === false) {
        return $can_view;
    }

    // Если это первый урок, доступ всегда разрешён
    if ($current_index === 0) {
        return $can_view;
    }

    // Получаем ID предыдущего урока
    $prev_lesson_id = $lesson_ids[$current_index - 1];

    // Получаем время завершения предыдущего урока
    $meta_key = '_lp_lesson_completed_time_' . $user_id;
    $completed_time = get_post_meta($prev_lesson_id, $meta_key, true);

    if (!$completed_time) {
        // Предыдущий урок не завершён, доступ запрещён
        return false;
    }

    // Проверяем, прошла ли задержка
    $delay_seconds = $delay_days * DAY_IN_SECONDS;
    if ((time() - $completed_time) < $delay_seconds) {
        return false;
    }

    return $can_view;
}

// Хук для сохранения времени завершения урока
add_action('learn_press_user_lesson_completed', 'learnpressru_save_lesson_completed_time', 10, 3);

function learnpressru_save_lesson_completed_time($user_id, $lesson_id, $course_id) {
    $meta_key = '_lp_lesson_completed_time_' . $user_id;
    update_post_meta($lesson_id, $meta_key, time());
}

В этом коде мы реализовали два основных момента:

  • При попытке просмотра урока проверяем, завершён ли предыдущий урок, и прошла ли нужная задержка по времени.
  • При завершении урока сохраняем мета-данные с временем завершения для каждого пользователя.

Настройка задержки и расширение функционала

Значение задержки $delay_days сейчас жёстко задано в коде. Для удобства можно добавить страницу настроек или использовать опции WordPress, чтобы администратор мог менять время задержки без правки кода.

Например, для добавления опции:

add_action('admin_menu', function() {
    add_options_page('Настройки задержки уроков', 'Задержка уроков', 'manage_options', 'lp-lesson-delay', 'learnpressru_delay_settings_page');
});

function learnpressru_delay_settings_page() {
    if (isset($_POST['delay_days'])) {
        update_option('learnpressru_delay_days', intval($_POST['delay_days']));
        echo '<div class="updated">Настройки сохранены.</div>';
    }
    $delay_days = get_option('learnpressru_delay_days', 2);
    echo '<form method="post">';
    echo '<label>Задержка между уроками (дней): </label>';
    echo '<input type="number" name="delay_days" value="'.esc_attr($delay_days).'" min="0" />';
    echo '<input type="submit" value="Сохранить" />';
    echo '</form>';
}

Далее нужно изменить логику проверки задержки, чтобы брать значение из опции:

$delay_days = get_option('learnpressru_delay_days', 2);

Советы по тестированию и отладке

При внедрении такой функциональности важно тщательно протестировать поведение на разных ролях пользователей и сценариях:

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

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

Альтернативные решения с помощью плагинов

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

  • Clearfy Pro — оптимизация и расширение функций LearnPress, включая управление доступом.
  • WPRemark — расширение полей и условий для курсов и уроков.

Однако специфической функции именно отсрочки уроков в стандартных плагинах мало — чаще приходится делать кастомные решения.

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

⭐⭐⭐⭐⭐
Как запретить регистрацию учащихся с одинаковым email в LearnPress
12.01.2026
Как установить и настроить OmniVideo для LearnPress: пошаговое руководство
27.01.2026
Как использовать REST API в LearnPress для автоматизации
22.11.2025
Как оптимизировать производительность WordPress для обучающих платформ LearnPress
18.11.2025
Как автоматизировать создание курсов в LearnPress через импорт CSV
08.04.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее