Fix: lecciones sin contenido en LearnPress 4.x
Por qué algunas lecciones aparecen en blanco y cómo solucionarlo
¿Creamos código nuevo en esta lección?
No creamos archivos nuevos. Mejoramos un archivo que ya existía:
• learnpress/content-lesson/content.php — le agregamos un sistema de 3 capas de rescate para que el contenido siempre aparezca, incluso cuando LearnPress 4.x tiene problemas para cargarlo.
El problema: la lección abre pero no muestra nada
En LearnPress 4.x existe un bug conocido donde la página de la lección carga correctamente (se ve el título, el botón «Completar») pero el área del texto aparece completamente en blanco.
❌ Con el bug — contenido en blanco
Inicio
Cursos
✅ Con el fix — contenido visible
Inicio
Cursos
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam ut cursus arcu. Vivamus at leo quis enim ornare imperdiet quis ut velit…
Pellentesque enim lorem, viverra eu maximus id, vehicula in dui. Integer quis est sit amet sapien…
El estudiante no ve ningún error — la página parece cargada, pero el contenido simplemente no está. Eso hace que sea difícil detectarlo si no lo pruebas como estudiante.
Las 3 causas más comunes
El filtro
learn-press/override-templates devuelve false por defecto en LP 4.x. WordPress ignoraba todos los archivos de nuestra carpeta learnpress/.
add_filter() en functions.phpLearnPress 4.x a veces llama al template fuera del «Loop» de WordPress. El método
get_content() necesita que $post esté apuntando a la lección activa.
Si el contenido fue creado con Divi, WPBakery u otro page builder, puede contener shortcodes (
[et_pb_section ...]) que no se ejecutan automáticamente.
do_shortcode() para procesar cualquier shortcode
¿Qué pasa paso a paso cuando hay un bug?
Así se ve el flujo cuando el contenido falla — y cómo nuestro fix lo intercepta:
content-lesson/content.php$lesson->get_content() para obtener el textoget_content() retorna vacío porque el $post global no está configurado correctamente en este contextoget_post($lesson->get_id()) y obtiene el contenido guardadoapply_filters('the_content', ...) para que se procesen bloques y shortcodes correctamente
Los cambios en content.php
Actualizamos el archivo que ya teníamos desde la lección 4.4. El contenido nuevo son los pasos 2 y 3 del fallback:
📄 index.php ← seguridad (lección 4.4, sin cambios)
📄 title.php ← override del título (lección 4.4, sin cambios)
📄 content.php ← ACTUALIZADO con el fix de 3 pasos
📄 button-complete.php ← override del botón (lección 4.4, sin cambios)
$content = $lesson->get_content();
if ( ! $content ) {
learn_press_display_message( … );
return; // sale SIN div
}
<div class=«…lms-lesson-content»>
learn_press_echo_vuejs_write_on_php( $content );
</div>
$content = $lesson->get_content();
// Paso 2: fallback directo a la BD
if ( ! $content ) {
$post_obj = get_post( $lesson->get_id() );
$content = apply_filters( ‘the_content’, … );
}
// Paso 3: procesar shortcodes
$content = do_shortcode( $content );
<div class=«…lms-lesson-content»>
learn_press_echo_vuejs_write_on_php( $content );
</div>
Nota importante: el mensaje de «contenido vacío» ahora se muestra dentro del <div>, no antes. El original hacía return antes del div, lo que podía romper el layout en algunos temas.
Cómo verificar que el fix está activo
lms-lesson-content
<div class="content-item-description lesson-description lms-lesson-content">
Resultado
✅ Lo que logramos en esta lección
Entendimos las 3 causas por las que las lecciones aparecen en blanco en LearnPress 4.x.
Si el método normal falla, hay dos rutas de rescate antes de rendirse y mostrar «vacío».
do_shortcode() asegura que el contenido creado con Divi o WPBakery se procese correctamente.
El div contenedor se renderiza siempre. El mensaje de «vacío» está dentro del div, no interrumpe el flujo HTML.
<div class=«lms-lesson-header»> ← del title.php (lección 4.4)
<div class=«content-item-description lesson-description lms-lesson-content«>
… contenido de la lección visible aquí …
</div>
<div class=«lms-complete-wrap»> ← del button-complete.php (lección 4.4)