В системе LearnPress иногда возникает необходимость автоматически перезапускать курсы для пользователей по расписанию. Это может быть полезно, например, для курсов с ограниченным сроком доступа, повторяющихся тренингов или обновляемых учебных материалов. В этой статье мы рассмотрим, как реализовать автоматический перезапуск курса с помощью встроенного планировщика задач WordPress — WP-Cron, а также приведём пример кода и рекомендации по плагинам для более гибкого управления расписанием.
Что такое автоматический перезапуск курса и зачем он нужен
Автоматический перезапуск курса — это процесс сброса прогресса пользователя и повторного открытия доступа к курсу через определённый интервал времени. Такой механизм позволяет:
- Обеспечить повторное прохождение курсов, например, для обучения новым версиям материала.
- Автоматизировать управление сроком доступа, избавляя администратора от ручного контроля.
- Поддерживать актуальность обучения, регулярно обновляя контент и давая пользователям возможность пересмотреть материал.
LearnPress из коробки не предусматривает полностью автоматический механизм перезапуска, но благодаря гибкости WordPress и возможности работы с WP-Cron, реализовать это можно самостоятельно или с помощью плагинов.
Использование WP-Cron для автоматического перезапуска курсов
WP-Cron — это внутренняя система планировщика задач WordPress, которая позволяет запускать функции в заданное время или с определённым интервалом. Чтобы организовать автоматический перезапуск курса, нам нужно:
- Создать функцию, которая будет сбрасывать прогресс пользователя по курсу.
- Запланировать выполнение этой функции с нужной периодичностью.
Пример функции сброса прогресса курса в LearnPress
Для начала создадим функцию learnpress_reset_course_progress, которая сбрасывает прогресс конкретного курса для всех пользователей, прошедших его ранее:
function learnpress_reset_course_progress($course_id) {
if (empty($course_id)) {
return;
}
// Получаем всех пользователей, которые проходили курс
$user_ids = get_users(array(
'meta_key' => '_lp_course_' . $course_id . '_status',
'meta_value' => 'completed',
'fields' => 'ID'
));
if (empty($user_ids)) {
return;
}
foreach ($user_ids as $user_id) {
// Используем LearnPress API для сброса прогресса
$user = learnpress_get_user($user_id);
if ($user) {
$user->reset_course($course_id);
}
}
}В этом примере мы используем функцию learnpress_get_user для получения объекта пользователя LearnPress, а затем метод reset_course для сброса прогресса. Обратите внимание, что эти функции доступны, если LearnPress подключен и активен.
Запланируем задачу с помощью WP-Cron
Добавим задачу в планировщик, которая будет запускать перезапуск курса по расписанию. Например, ежедневно в 3 часа ночи:
function learnpress_schedule_course_reset() {
if (!wp_next_scheduled('learnpress_daily_course_reset')) {
wp_schedule_event(strtotime('03:00:00'), 'daily', 'learnpress_daily_course_reset');
}
}
add_action('wp', 'learnpress_schedule_course_reset');
add_action('learnpress_daily_course_reset', 'learnpress_do_course_reset');
function learnpress_do_course_reset() {
$course_id = 123; // ID вашего курса
learnpress_reset_course_progress($course_id);
}Этот код проверяет, запланирована ли уже задача learnpress_daily_course_reset, и если нет — создаёт её. Далее, при срабатывании, вызывается функция сброса прогресса для указанного курса.
Как сделать перезапуск для нескольких курсов и с гибким расписанием
Если нужно сбрасывать прогресс для нескольких курсов или использовать более сложное расписание, можно:
- Хранить в настройках сайта список ID курсов для сброса.
- Добавить поддержку пользовательских интервалов WP-Cron (например, еженедельно, ежемесячно).
- Использовать плагины для управления расписанием, например Clearfy Pro, который позволяет расширять возможности WP-Cron и оптимизировать задачи.
Пример кода для сброса прогресса по списку курсов:
function learnpress_reset_multiple_courses() {
$course_ids = array(123, 456, 789); // Список ID курсов
foreach ($course_ids as $course_id) {
learnpress_reset_course_progress($course_id);
}
}Расписание можно задать аналогично, изменив вызов функции на learnpress_reset_multiple_courses.
Дополнительные советы и плагины для автоматизации расписания
Для удобного управления задачами WP-Cron рекомендуем обратить внимание на плагины:
- Clearfy Pro — расширяет возможности планировщика, позволяет управлять задачами, отключать лишние события и оптимизировать сайт.
- WP Crontrol — бесплатный плагин для просмотра и управления задачами WP-Cron из админки.
Использование таких инструментов значительно упростит отладку и настройку автоматических процессов в LearnPress.
Обработка ошибок и безопасность
При работе с автоматическими задачами важно предусмотреть обработку ошибок, чтобы случайные сбои не нарушали обучение пользователей. Рекомендуется логировать результаты выполнения задач, например:
function learnpress_do_course_reset() {
$course_id = 123;
try {
learnpress_reset_course_progress($course_id);
error_log('LearnPress: сброс курса '.$course_id.' выполнен успешно.');
} catch (Exception $e) {
error_log('LearnPress: ошибка при сбросе курса '.$course_id.': '.$e->getMessage());
}
}Также убедитесь, что пользовательские данные не теряются без возможности восстановления. Для этого можно делать резервные копии перед сбросом или предупреждать пользователей о перезапуске курса.