Página de Bienvenida en el Panel de Administración
includes/class-admin-page.php. No se modifica ningún otro archivo del plugin.
1. ¿Qué es una página de administración permanente?
En la lección 5.2 creamos el Welcome Wizard: una página que aparece una sola vez cuando activás el plugin y que no se muestra en el menú lateral. Es perfecta para dar la bienvenida al usuario por primera vez.
En esta lección vamos a crear algo diferente: una página permanente que vive en el menú lateral de WordPress Admin y que el administrador puede visitar en cualquier momento. Es el panel de control del plugin.
El wizard es como el cartel de «Bienvenido, nueva casa» que está una sola vez cuando entrás por primera vez.
La página de admin es como el tablero de control del calefón que siempre está colgado en la pared: podés consultarlo cuando quieras.
La diferencia técnica entre los dos tipos de página:
| Tipo | Función PHP | ¿Aparece en el menú? | ¿Cuándo se usa? |
|---|---|---|---|
| Wizard (lección 5.2) | add_dashboard_page() |
No — está oculta | Una sola vez, al activar el plugin |
| Panel de control (esta lección) | add_menu_page() |
Sí — ícono propio en la barra lateral | Siempre accesible para el administrador |
2. Qué archivo se modifica hoy
wp-content/plugins/divi-lms-helper/includes/class-admin-page.phpEn la lección 5.1 este archivo se creó vacío como esqueleto. Hoy lo completamos.
3. Cómo funciona add_menu_page()
La función add_menu_page() le dice a WordPress: «quiero un ítem propio en el menú lateral del admin». Recibe estos parámetros:
| # | Parámetro | Ejemplo en nuestro plugin | Para qué sirve |
|---|---|---|---|
| 1 | Título de la página | 'Divi LMS Helper' |
Aparece en la pestaña del navegador cuando estás en esa página |
| 2 | Texto del menú | 'Divi LMS Helper' |
El texto que se ve en la barra lateral de WP Admin |
| 3 | Capacidad | 'manage_options' |
Solo los administradores pueden ver esta página |
| 4 | Slug | 'divi-lms-helper' |
Identificador único. La URL queda: admin.php?page=divi-lms-helper |
| 5 | Función de renderizado | [ $this, 'render' ] |
La función PHP que dibuja el contenido de la página |
| 6 | Ícono | 'dashicons-welcome-learn-more' |
El ícono que aparece en el menú (biblioteca de íconos de WordPress) |
| 7 | Posición | 30 |
Dónde aparece en el menú. El 30 lo ubica debajo de Comentarios |
4. El código completo
wp-content/plugins/divi-lms-helper/includes/class-admin-page.php
<?php
/**
* Divi LMS Helper — Página de administración
*/
if ( ! defined( 'ABSPATH' ) ) { exit; }
class DLMS_Admin_Page {
// Constructor: conectar el hook del menú
public function __construct() {
add_action( 'admin_menu', [ $this, 'register_page' ] );
}
// Registrar la página en el menú lateral de WP Admin
public function register_page() {
add_menu_page(
'Divi LMS Helper', // Título en la pestaña del navegador
'Divi LMS Helper', // Texto en el menú lateral
'manage_options', // Solo administradores
'divi-lms-helper', // Slug: admin.php?page=divi-lms-helper
[ $this, 'render' ], // Función que dibuja el contenido
'dashicons-welcome-learn-more', // Ícono de WordPress
30 // Posición en el menú
);
}
// Renderizar el contenido de la página
public function render() {
if ( ! current_user_can( 'manage_options' ) ) { return; }
// Detectar si los componentes necesarios están activos
$has_lp = class_exists( 'LearnPress' );
$has_divi = defined( 'ET_BUILDER_VERSION' );
$has_ct = ( wp_get_theme()->get( 'Template' ) === 'Divi' );
?>
<div class="dlms-admin-wrap">
<!-- Encabezado -->
<div class="dlms-admin-header">
<h1>Divi LMS Helper</h1>
<p>Panel de control del plugin companion del child theme.</p>
<span class="dlms-version">v<?php echo esc_html( DLMS_VERSION ); ?></span>
</div>
<!-- Estado del sistema -->
<div class="dlms-admin-section">
<h2>Estado del sistema</h2>
<ul class="dlms-status-list">
<li class="<?php echo $has_lp ? 'ok' : 'error'; ?>">
<span class="dlms-status-icon"><?php echo $has_lp ? '[OK]' : '[Falta]'; ?></span>
<strong>LearnPress</strong> — plugin del LMS
</li>
<li class="<?php echo $has_divi ? 'ok' : 'error'; ?>">
<span class="dlms-status-icon"><?php echo $has_divi ? '[OK]' : '[Falta]'; ?></span>
<strong>Divi</strong> — constructor de páginas
</li>
<li class="<?php echo $has_ct ? 'ok' : 'error'; ?>">
<span class="dlms-status-icon"><?php echo $has_ct ? '[OK]' : '[Falta]'; ?></span>
<strong>Child theme Divi LMS Child</strong> — tema hijo activo
</li>
</ul>
</div>
<!-- Shortcodes y accesos directos ... -->
</div>
<?php
}
}
new DLMS_Admin_Page();
5. Tres secciones del panel de control
La función render() genera una página con tres secciones. Cada una cumple una función distinta:
Estado del sistema
Antes de que el usuario empiece a trabajar, el panel verifica que LearnPress, Divi y el child theme estén activos. Si algo falta, aparece
[Falta] en rojo. Si todo está bien, aparece [OK] en verde. Esto evita que el usuario se pregunte por qué algo no funciona.
Shortcodes disponibles
Una tabla de referencia rápida con los tres shortcodes del plugin: qué hacen y qué atributos aceptan. Así el administrador no tiene que recordarlos de memoria — los tiene siempre a mano.
Accesos directos
Botones que llevan directamente a las páginas más usadas: los cursos de LearnPress, los ajustes de LearnPress, Theme Options de Divi y el wizard de bienvenida. Todo desde un solo lugar.
6. Cómo detecta el estado del sistema
La parte más interesante del código es la verificación de dependencias. Usamos tres condiciones PHP:
Las tres verificaciones
$has_lp = class_exists( 'LearnPress' );
$has_divi = defined( 'ET_BUILDER_VERSION' );
$has_ct = ( wp_get_theme()->get( 'Template' ) === 'Divi' );
class_exists( 'LearnPress' ) — devuelve true si la clase principal de LearnPress existe en memoria. Solo existe si el plugin está activo.
defined( 'ET_BUILDER_VERSION' ) — devuelve true si la constante del builder de Divi está definida. Solo se define si Divi está activo.
wp_get_theme()->get( 'Template' ) === 'Divi' — lee la plantilla del tema activo y verifica que sea el child theme de Divi.
[Falta] automáticamente — sin tocar ningún código.
7. El CSS del panel vive dentro del PHP
Si mirás el archivo class-admin-page.php vas a ver un bloque <style> dentro de la función render(). Esto es una técnica válida en WordPress para agregar estilos que solo aplican a esa página de administración.
class-assets.php carga el CSS del frontend. Los estilos del admin van incrustados en el PHP para mantener las cosas ordenadas y evitar crear un archivo extra solo para 20 líneas de CSS.
8. Resultado visual
Después de guardar el archivo, al abrir WP Admin se ve el nuevo ítem «Divi LMS Helper» en el menú lateral con su ícono propio:
v1.0.0
Ajustes LearnPress
Theme Options Divi
Ver wizard
El ítem «Divi LMS Helper» aparece en el menú lateral con su ícono (el gorro de graduación). El panel muestra los tres componentes en verde porque LearnPress, Divi y el child theme están activos.
9. Verificación de la lección
- Abrí WP Admin. En el menú lateral debería aparecer «Divi LMS Helper» con un ícono de gorro de graduación.
- Hacé clic en él. Debe abrirse la página con el encabezado azul, el estado del sistema y los shortcodes.
- En la sección «Estado del sistema» verificá que los tres ítems muestren
[OK]en verde (LearnPress activo, Divi activo, child theme activo). - Hacé clic en el botón «Ver cursos» — debe llevar a la lista de cursos de LearnPress.
- Hacé clic en «Ver wizard de bienvenida» — debe mostrar el wizard de la lección 5.2.
DLMS_Admin_Page con el método register_page() que usa add_menu_page() para agregar un ítem permanente en el menú lateral de WP Admin. La página muestra el estado del sistema (LearnPress, Divi, child theme), una tabla de referencia de shortcodes y botones de acceso rápido. Diferencia clave con el wizard: esta página siempre está disponible en el menú, mientras que el wizard aparece una sola vez al activar el plugin.