¿Cómo puede saber qué página de plantilla sirve la página actual?

47

Cuando activa un tema de wordpress, siempre es una molestia averiguar qué archivo ir para cambiar las cosas. ¿Alguna idea de cómo simplificar las cosas?

Pero, por otro lado, considerando la funcionalidad get_template_part, esto puede ser imposible. ¿Qué dices?

    
pregunta Average Joe 24.12.2011 - 21:32

9 respuestas

31

Enganche a template_include , establece un global para anotar la plantilla establecida por el tema y luego lee ese valor en el pie de página o encabezado para ver a qué plantilla se está llamando para una vista determinada.

Hablé sobre este gancho de filtro antes en Obtenga el nombre del actual archivo de plantilla , pero vaya a agarrar una copia de ese código y haga clic en el archivo functions.php de su tema .

Luego, abre el tema header.php o footer.php (o donde quieras) y usa algo como lo siguiente para imprimir la plantilla actual.

<div><strong>Current template:</strong> <?php get_current_template( true ); ?></div>

Si desea usar esto en un sitio de producción y mantener esa información lejos de los usuarios que no son administradores, agregue un poco de lógica condicional.

<?php 
// If the current user can manage options(ie. an admin)
if( current_user_can( 'manage_options' ) ) 
    // Print the saved global 
    printf( '<div><strong>Current template:</strong> %s</div>', get_current_template() ); 
?>

Ahora puede hacer un seguimiento de las vistas que usan qué plantilla, mientras mantiene esa información lejos de sus visitantes.

    
respondido por el t31os 26.12.2011 - 13:57
34

Bueno, si todo lo que desea es verificar qué plantilla se ha utilizado para generar la página actual, entonces no necesita ensuciarse las manos con el código;)

Hay un útil complemento llamado Debug Bar . Es un gran ayudante en Muchas situaciones incluyendo la tuya. Definitivamente, deberías comprobarlo, para mí y para muchos otros es un compañero imprescindible para cualquier desarrollo de WP.

He adjuntado una captura de pantalla que podría enamorarte ...

Paraquelabarradedepuraciónfuncione,debehabilitarlasopcioneswp_debugywp_savequeries.Estasopcionesestándeshabilitadaspordefecto.

Sinembargo,antesderealizarcambios,hayalgunospuntosatenerencuenta:

  • Nolohagaenunentornodeproducciónamenosqueelsitiowebnoatiendaaunagrancantidaddetráfico.
  • Unavezquetermineladepuración,asegúresededesactivarlasopciones(especialmentelaopciónwp_savequeries,yaqueafectaelrendimiento)delsitioweb.

Parahacerloscambios:

  1. Abraelarchivowp_config.phpatravésdeunclienteftp.
  2. Buscalaopciónwp_debug.Edítaloadefine('WP_DEBUG',true);.Silalíneanoestápresente,agréguelaalarchivo.
  3. Delmismomodo,editeoagreguelalíneadefine('SAVEQUERIES',true);alarchivo.
  4. guardar.Ustedestálistoparaladepuración.

Másinformación: Codex

    
respondido por el Michal Mau 26.12.2011 - 19:16
14

Utilizo esta práctica función que muestra la plantilla actual solo para superadministradores:

function show_template() {
    if( is_super_admin() ){
        global $template;
        print_r($template);
    } 
}
add_action('wp_footer', 'show_template');

Espero que ayude. :)

    
respondido por el mightypixel 23.01.2014 - 14:06
13

Agregue el siguiente código justo después de la línea get_header en cada archivo de plantilla relevante:

<!-- <?php echo basename( __FILE__ ); ?> -->

En tu navegador > vea la fuente, y el nombre de la plantilla se mostrará como un comentario en su código html, por ejemplo,

<!-- page.php -->
    
respondido por el ronald 27.12.2011 - 19:32
4

La forma más sencilla que he encontrado es incluir la función de WordPress en la etiqueta del cuerpo. Agregará varias clases dependiendo de la página que esté viendo (página principal para el frente, página por página, etc.).

Revíselo aquí: enlace

Además, es útil para segmentar elementos con CSS en esas páginas.

Conocer la jerarquía de plantillas (http://codex.wordpress.org/Template_Hierarchy) como mencionó David R también es una buena idea.

    
respondido por el CookiesForDevo 25.12.2011 - 13:51
4

Hay otro complemento más básico específicamente para este propósito. Me inclino por instalar la barra de depuración, porque esas otras características parecen útiles, pero esta es más básica y específicamente para este propósito: enlace

    
respondido por el Julian K 29.01.2013 - 05:22
3

Una cosa muy simple que hago es insertar un comentario HTML que identifica el archivo de plantilla en cada archivo relevante del tema, por ejemplo, en la parte superior de index.php que tengo

<!-- index -->

y en la parte superior de front-page.php

<!-- front -->

Pero obviamente eso requiere modificar el tema. Sospecho que podría agregar una función personalizada en el archivo footer.php o header.php que le diría qué archivo se estaba utilizando. El método anterior y el cuadro de referencia enlace son lo que tiendo a usar.

    
respondido por el David R 24.12.2011 - 21:40
3

Hay un complemento llamado Theme Check que hace exactamente esto. Muestra el nombre del archivo de plantilla actual en uso como comentario HTML.

    
respondido por el navjotjsingh 26.12.2011 - 21:31
3

Aquí tienes:

Una lista HTML con todos archivos de plantilla en uso para la página de destino actual, incluyendo todas las partes de la plantilla de complementos, tema secundario y / o combinaciones de tema principal , todo en una línea de código:

echo '<ul><li>'.implode('</li><li>', str_replace(str_replace('\', '/', ABSPATH).'wp-content/', '', array_slice(str_replace('\', '/', get_included_files()), (array_search(str_replace('\', '/', ABSPATH).'wp-includes/template-loader.php', str_replace('\', '/', get_included_files())) + 1)))).'</li></ul>';

PUEDE tener que verificar que su servidor no está devolviendo barras de duplicación en ninguna ruta . Recuerda colocar esto después de que todos los archivos de plantilla hayan sido realmente utilizados, como en footer.php, pero antes de que aparezca la barra de administración .

si la ruta admin-bar stuff se muestra en la parte superior, o en cualquier otro archivo, cambie el nombre de archivo template-loader.php en esta línea de código a: cualquier nombre de archivo del que deba separarse. A menudo: class-wp-admin-bar.php

si necesita esto en la barra de administración, use la prioridad correcta (más pronto) para asegurarse de que no se ingresen archivos al final de esta lista. Por ejemplo:

add_action('admin_bar_menu', 'my_adminbar_template_monitor', -5);

la prioridad -5 hace que shure se cargue primero. La clave es llamar a get_included_files() en el momento adecuado, de lo contrario, ¡se necesita un despliegue de matrices!

Para romper esto:

Usted no puede recopilar todos los archivos de plantilla incluidos sin retroceso de PHP. Los superglobales dentro de template_include no los recopilarán todos . La otra forma es "colocar un marcador" en cada archivo de plantilla, pero si primero necesitas interactuar con los archivos, debes ocuparte del tiempo y de la idea en general.

1) Necesitamos revisar dentro de todos los archivos que han sido utilizados por la solicitud actual de Wordpress. ¡Y son muchos! No se sorprenda si está utilizando 300 archivos incluso antes de que sus funciones.php estén registradas.

$included_files = str_replace('\', '/', get_included_files());

Estamos utilizando los get_included_files () nativos de PHP, convirtiendo barras invertidas en barras diagonales para que coincidan con la mayoría de las rutas de retorno de Wordpress.

2) Estamos cortando esa matriz desde donde se registra el template-loader.php. Después de eso, los archivos get_included_files () rellenados solo deben tener archivos de plantilla rellenados.

/* The magic point, we need to find its position in the array */
$path = str_replace('\', '/', ABSPATH);
$key = $path.'wp-includes/template-loader.php';
$offset = array_search($key, $included_files);

/* Get rid of the magic point itself in the new created array */
$offset = ($offset + 1);
$output = array_slice($included_files, $offset);

3) Acortar los resultados, no necesitamos la ruta hasta que la carpeta de tema o la carpeta de complementos, como plantillas en uso, se pueda mezclar desde plugins, tema o carpetas de temas secundarios.

$replacement = $path.'wp-content/';
$output = str_replace($replacement, '', $output);

4) Finalmente, conviértalo de una matriz a una buena lista de HTML

$output = '<ul><li>'.implode('</li><li>', $output).'</li></ul>';

Podría ser necesaria una última modificación en la parte 3) -reemplazo , si no quiere requeridos incluye por plugins Podrían llamar a class-files tarde e "interceptar" durante el procesamiento de salida de la plantilla.

Sin embargo, me pareció razonable dejarlos visibles, ya que la idea es hacer un seguimiento de lo que se ha cargado , incluso si no es una "plantilla" la que genera resultados en esta etapa.

    
respondido por el Jonas Lundman 15.09.2017 - 08:14

Lea otras preguntas en las etiquetas