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

54

Cuando activa un tema de WordPress, siempre es una molestia averiguar a 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?

Joe promedio
fuente
1
Inspecciono el html y encuentro una etiqueta identificada o algo único.
Naoise Golden
1
Vea el código fuente y busque las clases de cuerpo que le indican qué plantilla se utiliza. También te da la identificación
Brad Dalton
@BradDalton +1. Especialmente cuando no se nos permite instalar un complemento o escribir una función para lograr el objetivo.
Subrata Sarkar

Respuestas:

34

Enganche template_include, establezca un global para anotar la plantilla establecida por el tema y luego lea ese valor nuevamente en el pie de página o encabezado para ver qué plantilla se llama para una vista determinada.

Hablé sobre este gancho de filtro antes en Obtener nombre del archivo de plantilla actual , pero vaya a tomar una copia de ese código y colóquelo en el functions.phparchivo de su tema .

Luego abra el tema header.phpo footer.php(o donde desee) y use algo como lo siguiente para imprimir la plantilla actual.

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

Si desea utilizar esto en un sitio de producción y mantener esa información lejos de sus usuarios no 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 realizar un seguimiento de qué vistas están utilizando qué plantilla, mientras mantiene esa información lejos de sus visitantes.

t31os
fuente
1
Si hay algo mal con esta respuesta, o si alguien puede hacer comentarios sobre lo que se podría hacer para mejorar esta respuesta, háganlo, deje un comentario aquí y comparta sus pensamientos e ideas sobre cómo mejorarla.
t31os
1
No funcionó hermano, dice "Función indefinida"
Lucas Bustamante
1
@LucasB igual aquí, ese es el error que obtuve
Lincoln Bergeson
Esto debería serget_page_template
Blazemonger
40

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

Existe este práctico complemento llamado Debug Bar . Es un gran ayudante en muchas situaciones, incluida la suya. Definitivamente deberías echarle un vistazo, para mí y para muchos otros es un compañero imprescindible para cualquier desarrollo de WP.

Adjunto una captura de pantalla que podría enamorarte ...

ingrese la descripción de la imagen aquí

Para conseguir la depuración Barra de trabajo , necesita habilitar wp_debugy wp_savequeriesopciones. Estas opciones están en estado deshabilitado por defecto.

Sin embargo, antes de realizar cualquier cambio, hay algunos puntos a tener en cuenta:

  • No lo haga en un entorno de producción a menos que el sitio web no tenga mucho tráfico.
  • Una vez que termine de depurar, asegúrese de deshabilitar las opciones (especialmente la opción wp_savequeries ya que afecta el rendimiento) del sitio web.

Para hacer los cambios:

  1. Abrir wp_config.phparchivo a través de un cliente ftp.
  2. Busca la wp_debugopción. Edítalo en define( 'WP_DEBUG', true );. Si la línea no está presente, agréguela al archivo.
  3. Del mismo modo, edite o agregue la línea define( 'SAVEQUERIES', true );al archivo.
  4. Salvar. Estás listo para depurar.

Más información: Codex

Michal Mau
fuente
2
@justCallMeBiru: el complemento de la barra de depuración no requiere WP_DEBUG y SAVEQUERIES, aunque está mejorado por ellos.
Pat J
3
Ejecutar dicho complemento, solo por un poco de información crea una gran cantidad de gastos indirectos, y por eso no lo sugerí en mi propia respuesta. Dicho esto, claramente la gente prefiere esta respuesta, aunque tengo curiosidad por saber por qué.
t31os
23

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. :)

mightypixel
fuente
2
Esta es la respuesta goto, debe ser aceptada.
Hybrid Web Dev
12

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 su navegador> ver fuente, y el nombre de la plantilla se mostrará como un comentario en su código html, p. Ej.

<!-- page.php -->
ronald
fuente
es demasiado esfuerzo agregar esto en todas partes
Adal
4

La forma más fácil 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 (inicio para el frente, página por página, etc.).

Compruébelo aquí: http://codex.wordpress.org/Function_Reference/body_class

Además, es útil para orientar 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.

CookiesForDevo
fuente
4

Hay otro complemento más básico específicamente para este propósito. Me estoy inclinando hacia la instalación de 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: http://wordpress.org/extend/plugins/what-the-file/

Julian K
fuente
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 la portada.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á qué archivo se está utilizando. El método anterior y la tabla de referencia http://codex.wordpress.org/Template_Hierarchy son lo que suelo usar.


fuente
3

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

navjotjsingh
fuente
3

Aqui tienes:

Una lista HTML con todos los archivos de plantilla en uso para la página de destino actual, incluidas todas las partes de plantilla de complementos, combinaciones de temas secundarios y / o temas principales , 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>';

Es posible que deba verificar que su servidor no devuelva barras de duplicación en ninguna ruta . Recuerde colocar esto después de que se hayan utilizado todos los archivos de plantilla, como en footer.php, pero antes de que se muestre la barra de administración .

si la admin-bar stuffruta se muestra en la parte superior o en cualquier otro archivo, cambie el nombre del archivo template-loader.phpen 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 priotity correcta (la más temprana) 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 -5hace que se cargue primero. ¡La clave es llamar get_included_files()en el momento correcto, de lo contrario se necesita un despliegue de matriz!

Para romper esto:

No puede recopilar todos los archivos de plantilla incluidos sin la traza inversa de PHP. Las superglobales del interior template_include no las recogerán todas . La otra forma es "colocar un marcador" en cada archivo de plantilla, pero si primero necesita interactuar con los archivos, tiene mucho tiempo y toda la idea.

1) Necesitamos verificar 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 se registre su functions.php.

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

Estamos usando el PHP get_included_files () nativo, 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 está registrado el template-loader.php. Después de eso, los 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) Acorte los resultados, no necesitamos la ruta hasta que la carpeta de temas o la carpeta de complementos, como plantillas en uso, se puedan mezclar desde complementos, temas o carpetas de temas secundarios.

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

4) Finalmente, convierta de matriz a una buena lista HTML

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

Es posible que se necesite una última modificación en el reemplazo de la parte 3) , si no desea que se incluyan los complementos. Pueden llamar class-filestarde 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 se trata de una "plantilla" que representa la salida en esta etapa.

Jonas Lundman
fuente