Вопрос или проблема
мы используем learndash LMS и хотим предоставить пользователям доступ к урокам каждый день в 6 утра с доступом на основе зачисления. Для этой цели LMS сохраняет время зачисления каждого пользователя в таблице usermeta базы данных в формате UNIX. Вопрос: Как я могу изменить это значение на ту же дату, когда пользователь был зачислен, но с временем 8 утра, чтобы день оставался тем же? И как я могу запустить эту функцию вскоре после того, как пользователь был зачислен?
Спасибо
Learndash написал мне с фильтром:
/**
* Доступ к уроку LearnDash
*
* Этот фильтр вызывается при использовании опций дозировки уроков learndash. Этот фильтр позволяет изменить значение временной метки.
*
* @since 2.4
*
* @param int $gmt_timestamps Это значение временной метки GMT, например 1489062972
* @param int $lesson_id ID урока.
* @param int $user_id ID пользователя. Это значение user_id, передаваемое вызываемой функции. Это может быть не текущий пользователь
*
* @return int скорректированное значение для $gmt_timestamp
*/
add_filter( 'ld_lesson_access_from__visible_after', function ( $gmt_timestamp = 0, $lesson_id = 0, $user_id = 0 ) {
// Проверяем, чтобы наша временная метка не была пустой
if ( !empty( $gmt_timestamp ) ) {
// Пример 1: В этом примере мы хотим удалить значения hh:mm:ss из временной метки, чтобы пользователь получил доступ в полночь.
// Предположим, для примера у вас есть урок с опцией 'Сделать урок видимым X дней после регистрации' со значением
// '1'. Ученик начал курс 2017-02-18 в 14:34. Это означало бы, что со значением '1' он получит доступ к уроку на следующий
// день (через 24 часа) 2017-02-19 в 14:34.
// Но предположим, вы не хотите, чтобы пользователь ждал 24 часа. Вы хотите, чтобы пользователь получил доступ в начале следующего дня, 2017-02-19 (в полночь).
// Логика ниже показывает, как это можно сделать.
// Затем конвертируем в формат YMD.
$gmt_ymd = date('Y-m-d H:i:s', $gmt_timestamp );
// На этом этапе $gmt_ymd все еще в GMT, поэтому нам нужно его преобразовать в наш местный часовой пояс. Для этого
// мы используем утилитную функцию WP get_date_from_gmt(). Но вместо того, чтобы конвертировать
// часы/минуты/секунды в местные, мы хотим установить их в 00:00:00, так что время будет полночь.
$gmt_local_midnight = get_date_from_gmt( $gmt_ymd, 'Y-m-d 00:00:00' );
// Поэтому теперь у нас есть удобочитаемое значение в $gmt_local_midnight
// которое будет что-то вроде '2017-02-15 00:00:00'.
// Теперь нам нужно вернуть временную метку (а не YMD) обратно в LD. Поэтому мы должны преобразовать дату YMD
// обратно во временную метку
$gmt_timestamp = learndash_get_timestamp_from_date_string( $gmt_local_midnight, true );
}
// Всегда возвращаем $gmt_timestamp.
return $gmt_timestamp;
}, 10, 3);
Ответ или решение
Вопрос об изменении времени записи пользователей в системе LMS LearnDash представляет собой интересную задачу, если цель состоит в том, чтобы пользователи получали доступ к урокам в определенное время, например, в 6 утра, а не в 8 утра, как это задано по умолчанию. Ваша текущая задача – манипулировать временем UNIX, которое хранится в таблице usermeta
базы данных. Рассмотрим, как это можно реализовать, используя фильтр, предоставленный LearnDash.
Во-первых, важно понимать, как работает данный фильтр ld_lesson_access_from__visible_after
. Он позволяет изменить временную метку (timestamp), которая определяет, когда пользователю будет доступен конкретный урок, с использованием механизма дрип-фид.
Процесс состоит из следующих шагов:
-
Получение временной метки в формате GMT: На начальном этапе мы имеем временную метку в формате GMT. Ваше цель – изменить только время, оставив дату неизменной.
-
Преобразование временной метки в формат даты: Для этого применяется функция
date('Y-m-d H:i:s', $gmt_timestamp)
, которая позволяет представить текущую временную метку в формате человекочитаемой даты и времени. -
Адаптация к местному времени: Используется функция
get_date_from_gmt
, чтобы перевести время в ваш локальный часовой пояс. Здесь вы должны заменить время на 06:00:00, чтобы зафиксировать начало доступа к урокам в вашем заданном времени. -
Преобразование даты обратно в временную метку: Используется функция
learndash_get_timestamp_from_date_string
, которая преобразует полученную строку даты обратно в формат временной метки UNIX. Это ключевой этап, так как LearnDash ожидает возвращаемое значение в этом формате. -
Использование хука: Код, предоставленный LearnDash, содержит использование функции
add_filter
, которая позволяет внедрить вашу логику прямо в процесс определения времени доступа к урокам.
Таким образом, создается настройка, при которой новые пользователи получают доступ к урокам в желаемое вами время, при этом все изменения синхронизированы с активностями пользователей.
Теперь, чтобы обеспечить выполнение этой функции сразу после регистрации пользователя, необходимо убедиться, что она интегрирована в процесс обработки новых подписок. Это можно обеспечить, например, через хуки, связанные с регистрацией новых пользователей в WordPress или LearnDash, в зависимости от вашей текущей конфигурации.
Это решение позволяет гибко управлять временем доступа учеников к учебному материалу в LMS LearnDash, и обеспечивает удобный пользовательский опыт.
Заключение
Эффективное применение вышеописанного механизма позволит вам точно настроить время доступа к курсам, соответствуя ожиданиям обучающихся и образовательным потребностям. Оригинальность и креативный подход к решению данной задачи подчеркнут ваш профессионализм и глубокое понимание технических аспектов платформы LearnDash.