El modelo de contenido

Qué almacena POM LMS y cómo se relacionan entre sí los cursos, las lecciones y los estudiantes.

Dos tipos de contenido

Tipo de contenido Clave Notas
Curso course Sin archivo; admite título, editor, miniatura y comentarios
Lección lesson Se lista en el menú Cursos; además admite atributos de página para el orden

Ambos son entradas normales. Todo lo que WordPress hace con las entradas — autores, estados, revisiones del contenido del editor, taxonomías registradas sobre ellas por el tema — se aplica.

Los cursos no tienen archivo, así que no hay un listado automático de /courses/ ni una plantilla de archivo que sobrescribir. Una página de catálogo es algo que el sitio construye.

La relación

Una lección nombra su curso. El curso nombra sus secciones.

Course
 ├── Sections (defined on the course, as a repeater)
 └── Lessons (each naming its course and one of those sections)

Consecuencias que importan cuando construyes sobre ello:

  • Las lecciones se asocian desde el lado de la lección. El curso no guarda una lista de sus lecciones; las encuentras consultando las lecciones que nombran al curso.
  • Una lección pertenece exactamente a un curso. Para usar el mismo material en dos cursos, duplica la lección.
  • Una lección sin curso no puede renderizarse. La plantilla de lección devuelve no encontrado, porque no hay reglas de acceso que aplicar.
  • Una lección que nombra una sección que ya no existe sigue asociada al curso — se cuenta en el progreso y está ausente del esquema.

Orden

Las lecciones se ordenan dentro de una sección mediante el campo menu order de WordPress, expuesto en el editor como el orden de los atributos de página.

Consulta las lecciones con orderby => menu_order para reproducir el orden del esquema.

Datos de acceso

La configuración de acceso reside en el curso, con sobrescrituras opcionales en la lección:

Aspecto Dónde
Requisito de inicio de sesión Curso
Regla de permiso Curso, sobrescribible por lección
Indicador de pago y productos asociados Curso
Indicador de vista previa Lección
Texto de sin acceso Curso, sobrescribible por lección

Léelos a través de los helpers de acceso en lugar de directamente. Los helpers codifican la precedencia, y la precedencia es la parte que no debe reimplementarse. Consulta El contrato de control de acceso.

Datos de progreso

La finalización se almacena por estudiante y por curso: qué lecciones ha completado ese estudiante en ese curso.

Léela con pom_lms_get_course_completion() y cámbiala con pom_lms_check_lesson(). Consulta Helpers de finalización.

El progreso se indexa por curso, de modo que mover una lección a otro curso deja atrás el registro antiguo y hace que la lección empiece sin completar en su nuevo hogar.

Qué no se almacena

Conviene saberlo antes de planificar una funcionalidad encima:

  • Sin registro de inscripción. No hay una lista de estudiantes en un curso. El acceso se calcula en cada petición a partir de roles, reglas y pedidos.
  • Sin marcas de tiempo. Nada registra cuándo empezó, terminó o abrió por última vez una lección un estudiante.
  • Sin puntuaciones, intentos ni entregas.
  • Sin certificados.

Si tu integración necesita cualquiera de ellos, necesita su propio almacenamiento.