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.