El asistente de acceso a la lección
pom_lms_user_can_access_lesson( int $lesson_id, int $course_id = 0 ): bool
Devuelve si el usuario actual puede acceder a una lección. Es el asistente que debes llamar antes de renderizar cualquier contenido de una lección.
El argumento del curso
Opcional. Pásalo cuando ya conoces el curso: te ahorra una consulta. Omítelo y el asistente lee el curso adjunto de la lección.
pom_lms_user_can_access_lesson( $lesson_id ); // resolves the course
pom_lms_user_can_access_lesson( $lesson_id, $course_id ); // uses the one you pass
Qué evalúa
| Paso | Condición | Resultado |
|---|---|---|
| 1 | La lección no tiene curso | false |
| 2 | El curso exige iniciar sesión y el visitante ha cerrado sesión | false |
| 3 | La lección tiene su propia regla de permisos | Lo que diga esa regla |
| 4 | El curso tiene una regla de permisos | Lo que diga esa regla |
| 5 | En caso contrario | La decisión de acceso del curso |
La regla propia de la lección reemplaza la regla del curso; no se suma a ella. Una lección con regla ignora por completo la regla del curso.
Una lección sin curso nunca es accesible
El paso 1 es la razón por la que una lección no adjunta devuelve «no encontrada» en la parte pública: sin curso, no hay reglas que aplicar, y denegar es la única respuesta segura.
Si tu integración crea lecciones de forma programática, establece el curso adjunto antes de publicar.
Vistas previas
Una lección marcada como vista previa es accesible para todo el mundo, sujeta únicamente al ajuste del curso sobre si las vistas previas exigen iniciar sesión.
Espera que el asistente devuelva true para visitantes anónimos en lecciones de vista previa. Es un comportamiento intencionado: la marca de vista previa es una decisión editorial, no un fallo.
Si necesitas saber si una lección es una vista previa, pom_lms_is_preview_lesson( $lesson_id ) lo devuelve como booleano. Úsalo para etiquetar, nunca como sustituto de la comprobación de acceso.
Cómo usarlo
if ( ! function_exists( 'pom_lms_user_can_access_lesson' ) ) {
return '';
}
foreach ( $lesson_ids as $lesson_id ) {
$accessible = pom_lms_user_can_access_lesson( $lesson_id, $course_id );
// Render the title either way; render the content only if accessible.
}
Ese patrón —títulos siempre, contenido de forma condicional— es lo que hace el esquema del curso. Los estudiantes ven la forma de lo que se están perdiendo, lo que resulta más persuasivo que ocultarlo.
No sustituyas el asistente del curso
Comprobar el curso y luego renderizar la lección omite dos cosas: la anulación de permisos de la lección y la marca de vista previa. Una de ellas filtra contenido; la otra oculta contenido que pretendías publicar.
Para el contenido de una lección, llama al asistente de la lección.
Solo el usuario actual
Al igual que con el asistente del curso, no hay parámetro de ID de usuario ni una forma admitida de preguntar en nombre de otro usuario. Comprueba el acceso en el momento del renderizado, en la propia solicitud del visitante.
Coste
El asistente de la lección delega en el asistente del curso cuando no se aplica ninguna regla a nivel de lección, por lo que se aplica la misma orientación: un curso de pago implica una comprobación de compra.
Al renderizar un esquema de muchas lecciones en un mismo curso, resuelve el curso una sola vez y pasa $course_id a cada llamada.