¿Cómo averiguas qué página de plantilla sirve a la página actual?
-
-
Inspeccionoel html yencuentro unaetiquetaidentificada o algo único.I inspect the html and find an identified tag or something unique.
- 1
- 2011-12-27
- Naoise Golden
-
Veael códigofuente ybusque las clases de cuerpo que leindican quéplantilla se utiliza.Tambiénte daeli.d.View the source code and look for the body classes which tell you which template is used. Also gives you the i.d.
- 1
- 2014-02-04
- Brad Dalton
-
Posible duplicado de [Obtenerelnombre del archivo deplantilla actual] (https://wordpress.stackexchange.com/questions/10537/get-name-of-the-current-template-file)Possible duplicate of [Get name of the current template file](https://wordpress.stackexchange.com/questions/10537/get-name-of-the-current-template-file)
- 0
- 2017-06-13
- Burgi
-
@BradDalton +1.Especialmente cuandono senospermiteinstalar un complemento oescribir unafunciónpara lograrel objetivo.@BradDalton +1. Specially when we are not allowed to install a plugin or write a function to achieve the goal.
- 0
- 2018-07-13
- Subrata Sarkar
-
9 respuestas
- votos
-
- 2011-12-26
Enganche a
template_include
,establezca unglobalpara anotar laplantillaestablecidaporeltema y luego leaese valoren elpie depágina oencabezadopara ver quéplantilla seestá llamandopara una vista determinada.Hablé sobreestegancho defiltro antesen Obtenerelnombre del actual archivo deplantilla ,pero obtenga una copia deese código y colóqueloen lasfunciones de
functions.php
.Luego abrael
header.php
ofooter.php
deltema (o donde quiera) y use algo como lo siguienteparaimprimir laplantilla actual.<div><strong>Current template:</strong> <?php get_current_template( true ); ?></div>
Si desea utilizarestoen un sitio deproducción ymanteneresainformación lejos de sus usuarios queno son administradores,agregue unpoco 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() ); ?>
Ahorapuede realizar un seguimiento de las vistas que utilizan quéplantilla,mientrasmantieneesainformación lejos de sus visitantes.
Hook onto
template_include
, set a global to note the template set by the theme then read that value back into the footer or header to see which template is being called for a given view.I spoke about this filter hook before in Get name of the current template file, but go grab a copy of that code and plonk it your theme's
functions.php
file.Then open up the theme's
header.php
orfooter.php
(or wherever you like) and use something like the following to print out the current template.<div><strong>Current template:</strong> <?php get_current_template( true ); ?></div>
If you wanted to use this on a production site and keep that info away from your non-administrator users, add a little conditional logic.
<?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() ); ?>
Now you can keep track of what views are using what template, whilst keeping that info away from your visitors.
-
Si hay algomal conesta respuesta,o si alguienpuedeproporcionar comentarios sobre lo que sepodría hacerparamejoraresta respuesta,hágalo,deje un comentario aquí y comparta suspensamientose ideas sobre cómomejorarlo.If there is something wrong with this answer, or if anyone could provide comments on what could be done to improve this answer, have at it, drop a comment here and share your thoughts and ideas on how to make it better.
- 1
- 2014-01-28
- t31os
-
Nofuncionó hermano,dice "Funciónno definida"It didn't work bro, it says "Undefined function"
- 1
- 2016-04-27
- Lucas Bustamante
-
Debe ser [`get_page_template`] (https://codex.wordpress.org/Function_Reference/get_page_template)This should be [`get_page_template`](https://codex.wordpress.org/Function_Reference/get_page_template)
- 2
- 2017-08-11
- Blazemonger
-
`get_current_template`noes unafunción y`get_page_template`noimprimenadaparamí (unapágina de woocommerce).`get_current_template` is not a function and `get_page_template` prints nothing for me (a woocommerce page).
- 0
- 2020-06-27
- run_the_race
-
- 2011-12-26
Bueno,si lo único que quiereses comprobar qué archivo deplantilla se ha utilizadoparagenerar lapágina actual,nonecesitasensuciarte lasmanos conel código;)
Existeeste útil complemento llamado barra de depuración . Es unagran ayudaen muchas situaciones,incluida la suya. Definitivamente deberíasecharle un vistazo;paramí yparamuchos otroses un compañeroimprescindiblepara cualquier desarrollo de WP.
He adjuntado una captura depantalla quepodríaenamorarte ...
Para que funcione labarra de depuración,debe habilitar las opciones
wp_debug
ywp_savequeries
. Estas opcionesestán deshabilitadas deformapredeterminada.Sinembargo,antes de realizar cambios,hay algunospuntos que debeteneren cuenta:
- No lo hagaen unentorno deproducción amenos queel sitio webno atiendamuchotráfico.
- Una vez quetermine de depurar,asegúrese de deshabilitar las opciones (especialmente la opción wp_savequeries,ya que afectael rendimiento) del sitio web.
Para realizar los cambios:
- Abrael archivo
wp_config.php
através de un clienteftp. - Busque la opción
wp_debug
. Edíteloendefine( 'WP_DEBUG', true );
. Si la líneanoestápresente,agréguela al archivo. - Demanera similar,edite o agregue la línea
define( 'SAVEQUERIES', true );
al archivo. - Guardar. Estás listopara depurar.
Másinformación: Codex
Well, if all you want is to check which template file has been used to generate the current page then you don't need to get your hands dirty with code ;)
There's this handy plugin called Debug Bar. It's a great helper in many situations including yours. You should definitely check it out - for me and many others it's a must-have companion for any WP development.
I've attached a screenshot that could make you fall in love...
To get the Debug Bar working, you need to enable
wp_debug
andwp_savequeries
options. These options are in disabled state by default.Before you make any changes though, there are a few points to keep in mind:
- Do not do it in production environment unless the website doesn't cater to a lot of traffic.
- Once you finish debugging, ensure to disable the options (especially the wp_savequeries option since it affects the performance) of the website.
To make the changes:
- Open
wp_config.php
file through a ftp client. - Search for
wp_debug
option. Edit it todefine( 'WP_DEBUG', true );
. If the line is not present, add it to the file. - Similarly, edit or add the line
define( 'SAVEQUERIES', true );
to the file. - Save. You are ready to debug.
More info: Codex
-
@justCallMeBiru:el complemento de labarra de depuraciónno * requiere * `WP_DEBUG` y` SAVEQUERIES`,aunquees *mejorado *porellos.@justCallMeBiru -- the Debug Bar plugin doesn't *require* `WP_DEBUG` and `SAVEQUERIES`, though it is *enhanced* by them.
- 2
- 2014-01-15
- Pat J
-
Ejecutar un complemento deestetipo,solopor unpoco deinformación,crea unagran cantidad degastosgeneralesen mi humilde opinión,yporesono lo sugeríen mipropia respuesta.Dichoesto,claramente lagente prefiereesta respuesta,aunquetengo curiosidadpor saberpor qué.Running such a plugin, just for one tid bit of information creates alot of overhead imho, and thus it is why i did not suggest it in my own answer. That said, clearly people prefer this answer, i'm curious to know why though.
- 3
- 2014-01-28
- t31os
-
- 2014-01-23
Utilizoestaprácticafunción quemuestra laplantilla actual solopara superadministradores:
function show_template() { if( is_super_admin() ){ global $template; print_r($template); } } add_action('wp_footer', 'show_template');
Espero quete ayude.:)
I use this handy function that displays the current template only for super admins:
function show_template() { if( is_super_admin() ){ global $template; print_r($template); } } add_action('wp_footer', 'show_template');
Hope that helps. :)
-
Estaes la respuestagoto,debería aceptarse.This is the goto answer, should be accepted.
- 3
- 2018-03-13
- Hybrid Web Dev
-
Yotambién usoesto,perotodavía carece de la visualización de qué "incluir" seestá utilizando y sólomuestra lapágina denivel superior.I use this also but it still lacks the display of which “include” is being used and only shows the top level page.
- 0
- 2020-07-08
- Burndog
-
- 2011-12-27
Agregueel siguiente códigojusto después de la líneaget_headeren cada archivo deplantilla relevante:
<!-- <?php echo basename( __FILE__ ); ?> -->
En sunavegador> vea lafuente,yelnombre de laplantilla semostrará como un comentarioen su código html,p.ej.
<!-- page.php -->
Add the following code right after the get_header line in each relevant template file:
<!-- <?php echo basename( __FILE__ ); ?> -->
In your browser > view source, and the template name will be displayed as a comment in your html code, e.g.
<!-- page.php -->
-
es demasiadoesfuerzo agregarestoen todaspartesit's too much effort to add this everywhere
- 0
- 2019-02-18
- Adal
-
jajaja,¿por quémolestarse conesto si va aetiquetar cada archivo y luego simplementeetiquetarlo con sunombre de archivo real?hahaha, why bother with this if you're going to label each file then simply label it with its actual file name!
- 0
- 2020-05-09
- Aurovrata
-
@Aurovratafue hacemuchotiempo.Haymuchasmejores soluciones.Perotenía un script simpleparainsertarel códigoen laparte superior detodos los archivosen una carpeta,por lo queno se requiere codificación denombres reales.Hechoen 1 o 2 segundos.@Aurovrata it was a long time ago. There are way better solutions. But I had a simple script to insert the code at the top of all files in a folder, so no hardcoding of actual names required. Done in 1 or 2 seconds.
- 0
- 2020-05-20
- ronald
-
- 2017-09-15
Aquítienes:
Una lista HTML con todos los archivos deplantillaen usopara lapágina de destino actual,incluidastodas laspartes deplantilla de los complementos,eltema secundario y/o las combinaciones detemaprincipal ,todoen 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 quetengas que comprobar quetu servidor nomuestrebarras dobladasen ninguna ruta . Recuerde colocaresto después de que se hayan utilizadotodos los archivos deplantilla,comoen footer.php,pero antes de que seprocese labarra de administración .
si la ruta
admin-bar stuff
semuestraen laparte superior,o cualquier otro archivo,cambieelnombre de archivotemplate-loader.php
en esta línea de código a:nombre de archivo del quenecesitas romper. Amenudo:class-wp-admin-bar.php
Sinecesitaestoen labarra de administración, use laprioridad correcta (antes) para asegurarse de queno seingresen archivos alfinal deesta lista. Porejemplo:
add_action('admin_bar_menu', 'my_adminbar_template_monitor', -5);
prioridad
-5
asegúrese de que se cargueprimero. La clavees llamar aget_included_files()
en elmomento correcto,de lo contrario,senecesitarán algunos arreglosemergentes.Para romperesto:
Nopuede recopilartodos los archivos deplantillaincluidos sinel seguimiento de PHP. Superglobales dentro de
template_include
no las recopilarátodas . La otraformaes "colocar unmarcador"en cada archivo deplantilla,pero siprimeronecesitainteractuar con los archivos,pierdeeltiempo y laidea completa.1) Necesitamos verificar dentro detodos los archivos que han sido utilizadospor la solicitud actual de Wordpress. ¡Y sonmuchos! No se sorprenda siestá utilizando 300 archivosincluso antes de que se registre sufunctions.php.
$included_files = str_replace('\\', '/', get_included_files());
Estamos usandoelget_included_files ()nativo de PHP,convirtiendobarrasinvertidasen barras diagonalespara que coincidan con lamayoría de las rutas de retorno de Wordpress.
2) Estamos cortandoesamatriz desde dondeestá registradotemplate-loader.php. Después deeso,losget_included_files () rellenados solo deberíantener archivos deplantilla 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) Acorta los resultados,nonecesitamos la ruta hasta que la carpeta deltema o la carpeta del complemento, comoplantillas en uso, sepuedanmezclar desde carpetas de complementos,temas otemas secundarios.
$replacement = $path.'wp-content/'; $output = str_replace($replacement, '', $output);
4) Finalmente,convierta dematriz a unabuena lista HTML
$output = '<ul><li>'.implode('</li><li>', $output).'</li></ul>';
Esposible que senecesite una últimamodificación en laparte 3) -remplazo ,si no desea incluye obligatorios por complementos. Pueden llamar a
class-files
tardee "interceptar" duranteelprocesamiento de salida de laplantilla.Sinembargo,me pareció razonable dejarlos visibles,ya que laideaes realizar un seguimiento de lo que se ha cargado ,incluso sinoes una "plantilla" la quegenera la salidaen estaetapa.
Here you go:
A HTML-list with all template files in use for the current landing page, including all template-parts from plugins, child theme and/ or parent theme combinations, all in one line of code:
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>';
You MAY need to check that your server does not returning dubble slashes at any path. Remember to place this after all template files actually been used, like in footer.php, but before admin bar renders.
if
admin-bar stuff
path is showing at the top, or any other file, change the filenametemplate-loader.php
in this line of code to: whatever filname you need to break from. Often:class-wp-admin-bar.php
if you need this in the admin bar, use the right priotity (earliest) to make shure no files are entered at the end of this list. For example:
add_action('admin_bar_menu', 'my_adminbar_template_monitor', -5);
priority
-5
make shure it loads first. The key is to callget_included_files()
at the right moment, otherwise some array-popping needed!To break this up:
You can not collect all included template files without PHP backtrace. Superglobals inside
template_include
wont collect them all. The other way is to "place a marker" in each template file, but if you need to interact with the files first, you hazzle with time and the whole idea.1) We need to check inside all the files that have been used by current Wordpress request. And they are many! Dont be surprised if you are using 300 files before even your functions.php is registered.
$included_files = str_replace('\\', '/', get_included_files());
We are using the PHP native get_included_files(), converting backslashes to forward slashes to match most of Wordpress returning paths.
2) We are cutting that array from where the template-loader.php is registered. After that, the populated get_included_files() should only have template files populated.
/* 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) Shorten down the results, we dont need the path until theme folder or plugin folder, as templates in use, can be mixed from plugins, theme or child theme folders.
$replacement = $path.'wp-content/'; $output = str_replace($replacement, '', $output);
4) Finally, convert from array to a nice HTML list
$output = '<ul><li>'.implode('</li><li>', $output).'</li></ul>';
A last modification might be needed in part3) -replacement, if you dont want required includes by plugins. They might call
class-files
late, and "intercept" during the template output processing.However, I found it reasonable to leave them visible, as the idea is to track whats been loaded, even if it is not a "template" that rendering output in this stage.
-
- 2011-12-25
Laformamásfácil que heencontradoesincluir lafunción de WordPressen laetiqueta del cuerpo.Agregará varias clases según lapágina queesté viendo (inicioparaelfrente,páginaporpágina,etc.).
Compruébelo aquí: http://codex.wordpress.org/Function_Reference/body_class
Además,es útilpara orientarelementos con CSSen esaspáginas.
Tambiénes unabuenaideafamiliarizarse con lajerarquía deplantillas (http://codex.wordpress.org/Template_Hierarchy) comomencionó David R.
Easiest way I've found is to include the WordPress function on the body tag. It'll add several classes depending on which page you're viewing (home for the front, page for page, etc).
Check it out here: http://codex.wordpress.org/Function_Reference/body_class
Plus it's helpful for targeting elements with CSS on those pages.
Getting to know the Template Hierarchy (http://codex.wordpress.org/Template_Hierarchy) as David R mentioned is also a good idea.
-
- 2013-01-29
Hay otro complementomásbásicoespecíficamenteparaestepropósito.Meinclino hacia lainstalación de labarra de depuración,porqueesas otras característicasparecen útiles,peroestaesmásbásica yespecíficamenteparaestepropósito: http://wordpress.org/extend/plugins/what-the-file/
There's another more bare-bones plugin specifically for this purpose. I'm leaning towards installing the debug bar, because those other features look useful, but this one is more basic and specifically for this purpose: http://wordpress.org/extend/plugins/what-the-file/
-
- 2011-12-24
Una cosamuy simple que hagoesinsertar un comentario HTMLidentificandoel archivo deplantillaen cada archivo relevante deltema,porejemplo,en laparte superior deindex.php quetengo
<!-- index -->
yen laparte superior defront-page.php
<!-- front -->
Pero obviamenteeso requieremodificareltema.Sospecho quepodría agregar unafunciónpersonalizadaen el archivofooter.php o header.php que le dirá qué archivo seestá utilizando.Elmétodo anterior y latabla de referencia http://codex.wordpress.org/Template_Hierarchy son los que suelo usar.utilizar.
One very simple thing I do is to insert an HTML comment identifying the template file in each relevant file of the theme, eg at the top of index.php I have
<!-- index -->
and at the top of front-page.php
<!-- front -->
But obviously that requires modifying the theme. I suspect you could add a custom function in the footer.php file or header.php which would tell you what file was being used. The above method and the reference chart http://codex.wordpress.org/Template_Hierarchy are what I tend to use.
-
- 2011-12-26
Hay un complemento llamado Theme Check que haceexactamenteesto.Muestraelnombre del archivo deplantilla actualen uso como comentario HTML.
There is a plugin named Theme Check which does exactly this. It displays the name of the current template file in use as a HTML comment.
Cuando activa untema de wordpress,siemprees complicado averiguar a qué archivoirpara cambiar las cosas. ¿Algunaidea de cómo simplificar las cosas?
Pero,por otro lado,considerando lafuncionalidadget_template_part,estopuede serimposible.¿Qué dices?