Consultas y helpers de URL
Encontrar cursos y lecciones, y enlazar a ellos.
No hay una API de consultas
POM LMS no proporciona funciones para listar cursos ni para obtener las lecciones de un curso. Los cursos y las lecciones son publicaciones normales, así que los consultas con WP_Query y get_posts() como cualquier otra cosa.
Este artículo documenta las formas que producen resultados correctos.
Listar cursos
$courses = get_posts( [
'post_type' => 'course',
'posts_per_page' => -1,
'fields' => 'ids',
] );
Los cursos no tienen archivo, así que no hay una consulta de archivo a la que engancharse ni una plantilla de archivo. Cualquier catálogo es una consulta que escribes tú.
Filtra siempre el resultado por acceso antes de mostrar contenido:
$accessible = array_filter( $courses, 'pom_lms_user_can_access_course' );
Los títulos y las miniaturas pueden mostrarse razonablemente para cursos que un visitante no puede abrir — eso es un catálogo. El contenido no.
Las lecciones de un curso
Las lecciones nombran su curso, no al revés. Consulta las lecciones por el campo de curso adjunto:
$lessons = get_posts( [
'post_type' => 'lesson',
'posts_per_page' => -1,
'meta_key' => 'pom_lms_lesson_course',
'meta_value' => $course_id,
'orderby' => 'menu_order',
'order' => 'ASC',
] );
orderby => menu_order reproduce el orden que los editores establecen con el campo de orden de atributos de página, que es el orden que usa el esquema del curso.
Esto devuelve todas las lecciones adjuntas al curso, incluidas las lecciones sin sección — que no aparecen en el esquema pero se cuentan en el progreso. Si estás reproduciendo el esquema, agrupa por sección y espera que algunas lecciones queden fuera de él.
Secciones
Las secciones se definen en el curso, como un repetidor de secciones con nombre; cada lección nombra la sección a la que pertenece.
Léelas de los campos almacenados del curso:
$course_metas = pom_lms_get_post_metas( $course_id );
Las secciones son contenido, no una taxonomía. No hay archivo de sección, no hay URL de sección ni término por el que consultar.
Estados de publicación
Solo las lecciones publicadas aparecen en el esquema. Al consultar, mantén el manejo de estado predeterminado — una consulta que incluya borradores mostrará a los estudiantes el trabajo inacabado de los editores.
URLs
Los cursos y las lecciones son publicaciones, así que get_permalink() es la forma correcta de enlazar a ellas.
echo esc_url( get_permalink( $lesson_id ) );
Nunca construyas una URL de curso o lección concatenando una base y un slug. Los segmentos base son configurables, y las URLs de lecciones además cambian de forma cuando se activa la estructura hija — la URL de get_permalink() sigue ambas, y una construida a mano no.
El área de cuenta
Resuelve la URL de My courses a través de las funciones de URL de cuenta de WooCommerce y el slug de endpoint configurado, en lugar de codificar una ruta de forma fija. El slug es un ajuste, y los sitios lo cambian.
Búsqueda
Los cursos y las lecciones son tipos de publicación consultables, así que pueden aparecer en la búsqueda del sitio dependiendo de la configuración de tu tema.
Los resultados de lecciones suelen ser un error: un título de lección fuera de contexto no significa nada, y una lección bloqueada en los resultados anuncia contenido que el visitante no puede abrir. Si tu tema te permite elegir los tipos buscables, incluye los cursos y excluye las lecciones.
Rendimiento
La consulta de lecciones anterior ejecuta una búsqueda de meta. En una página de curso que renderiza un esquema, ejecútala una vez y reutiliza el resultado en lugar de consultar por sección.
En cuanto al acceso, recuerda que los cursos de pago cuestan una búsqueda de pedido cada uno. Una página que lista un catálogo grande con comprobaciones de acceso por curso es el único lugar donde este plugin puede volverse lento.