Desarrollo web: jerarquía de plantillas en WordPress

Cómo detectar la ruta de la plantilla activa en WordPress

Plantillas WordPress

Cuando estamos desarrollando una página web en WordPress es muy útil saber en cada momento qué plantilla utiliza el sistema para mostrar la página en la que nos encontramos.

La jerarquía de plantillas de WordPress no es especialmente compleja, pero a veces es fácil perderse, especialmente si estamos trabajando con algún theme desarrollado por otro o que utiliza muchos tipos de entradas personalizados (custom posts types), formatos de entrada (post formats), diferentes taxonomías, etiquetas, etc.

Para no tener que utilizar el sistema de prueba y error, una buena solución para detectar la ruta de la plantilla activa es hacer que nos aparezca una nota de ayuda visible, algo así como el “Estás aquí” que se usa en los planos de edificios o ciudades.

Para ello tenemos que añadir este código a nuestro archivo functions.php:

// Detectar e imprimir la ruta de la plantilla activa
function ruta_plantilla() {
     global $template; ?>
     <div id="ruta_plantilla" style="background-color: #900; color: #fafafa; font-size: 11px; height: 30px; line-height: 30px; padding: 0 10px; position: absolute; top: 0; right: 0; text-align: right;  width: auto; z-index: 99999;"><?php print_r($template); ?></div>
<?php }

Con esto hemos creado una función llamada “ruta_plantilla” y hemos envuelto el resultado en un bloque con estilo (totalmente opcional, por supuesto): una barra superior de color rojo que flota sobre el diseño. También podemos eliminar el estilo y añadirlo desde una hoja CSS separada.

Después, tenemos que especificar dónde queremos que se imprima nuestra función. Para ello pegamos el siguiente código donde queramos, por ejemplo, en el archivo header.php:

<?php // Si es un usuario registrado, imprimimos la ruta completa
      if (is_user_logged_in()) { 
      ruta_plantilla(); 
} ?>

Por si nos olvidamos de eliminarlo cuando la web ya sea pública, siempre es buena idea envolver esta función dentro de un condicional que detecte si estamos o no conectados: is_user_logged_in.

Otra opción más habitual suele ser añadir nuestra función “ruta_plantilla” a la acción “wp-head”, para tenerlo todo en un mismo sitio. Aunque es una solución más sencilla, el problema es que así nos imprimirá la ruta de la plantilla entre las etiquetas <head>, no en el <body>:

// Detectar e imprimir la ruta de la plantilla activa
add_action('wp_head', 'ruta_plantilla');
function ruta_plantilla() {
     global $template;
     print_r($template);
}

El resultado, en cualquier caso, será una barra superior con la ruta completa a la plantilla activa. Por ejemplo:

/var/www/vhosts/dominio.com/httpdocs/wp-content/themes/mitema/front_page.php

Como es una información que no aporta nada al visitante de la web, conviene eliminar esta función al abrir la web al público.

No me atrevo, prefiero un plugin

Si por lo que sea prefieres no tocar el archivo functions.php, puedes utilizar este plugin:

Reveal Template: Reveal the theme template file used to render the displayed page

Este plugin te permite además elegir si quieres que se imprima la ruta completa (absoluta), relativa o solo el nombre de la plantilla.

Comentarios

  1. Pepe

    Lo acabo de usar en un tema de un tercero y me ha ayudado. Gracias.

  2. oscar

    Funciona genial, lo utilizo siempre.

  3. Noris Diaz (@Nd14Z)

    Opino que tienes dotes de pedagogo, explicas claramente, todo lo entiendo pero cuando voy a la practica me consigo un texto en ves de la ejecucion de la funcion. Es decir quiero llamar lal funcion en mi HOMEPAge y me aparece esto–: echo recent_comments(), quite las etiquetas de PHP porque con las etiquetas se borra el llamado. La funcion esta en el archivo correcto. Intente colocarla en wp-head y obtengo el mismo resultado. Gracias en anticipo

  4. enrique

    Muchas gracias por la solución. Es algo que llevaba buscando hace tiempo y es sencilla y funciona perfectamente.
    Una pregunta, ¿es posible conseguir que tambien nos muestre la plantilla que usamos cuando estamos en la zona de administración? ¿Como lo harias?

    Gracias de nuevo

Y tú qué opinas?

Las URLs se convertirán en enlaces automáticamente. Tu dirección de email no se publicará ni se utilizará para enviar ningún tipo de información. Los mensajes que no aporten nada al tema que se trata en esta entrada se borrarán. Las imágenes que aparecen al lado de cada autor utilizan el servicio de Gravatar. Recuerda que puedes usar etiquetas HTML como <a href>, <code>, <em> o <strong> en los comentarios.

(necesario)

(opcional)