Obtener el nombre del archivo de plantilla actual
-
-
@chodorowicz - Aunqueme detendré unpaso antes de llamar a la selección de `functions.php` como unerror,estaré completamente de acuerdo contupremisa.Paraempeorar las cosas,escaneéel código central de WordPress yencontré alrededor de 5 lugares dondepodría haber habido unganchoparapermitirlemanejaresteproblema,peronoencontréninguno.Sugeriríapublicar unticketen http://core.trac.wordpress.org.@chodorowicz - While I will stop one step short of calling the selection of `functions.php` as a bug, I will agree completely with your premise. To make matters worse I scanned the WordPress core code and found about 5 places where there could have been a hook to allow you to handle this issue yet I found none. I'd suggest posting a ticket on http://core.trac.wordpress.org.
- 2
- 2011-02-26
- MikeSchinkel
-
@MikeSchinkel:graciasporel comentario,pero ¿elgancho `template_include`,que sugiriót31os,no resuelveelproblema?Otal vezte heentendidomal.@MikeSchinkel - thanks for comment, but doesn't `template_include` hook, which t31os suggested, solve the issue? Or maybe I've misunderstood you.
- 0
- 2011-02-27
- chodorowicz
-
@chodorowicz - Ahorame tienesmuy confundido.La respuesta que dio @t31os resuelve unproblema queesmuy diferente del queentendí queestaba haciendoen base a supregunta y sus comentarios de seguimiento a las respuestas de otros.Pero si la respuesta de @t31os resolvió sunecesidad real,entoncesmi confusión aquínoesimportante ya que supregunta ha sido respondida.@chodorowicz - You now have me very confused. The answer @t31os gave solves a problem that is very different from the one that I understood you were asking based on your question and your follow up comments to other's answers. But if @t31os' answer solved your actual need, then my confusion here is unimportant as your question has been answered.
- 0
- 2011-02-27
- MikeSchinkel
-
Sí,lanecesidad realeramostrarelnombre del archivo detema utilizado actualmente,el código quepubliquétenía unafalla (que sepuede resolvermoviendo lafunciónfuera de la carpetaprincipal deltema),pero la solución de @t31osesmuchomás limpia ysatisface lanecesidad,pero,si leentiendo correctamente,elproblema real (WPno deberíaintentar leer `functions.php` como archivo deplantilla depágina) aúnpersiste.Intentarépublicarloen trac,todavíano lo he hecho.¡Saludos!Yes, the actual need was to display the name of the currently used theme file, the code I posted had a flaw (which can be solved by moving the function out of the main theme folder), but @t31os' solution is much cleaner and fulfills the need, but, if I understand you correctly, the real problem (WP shouldn't try to read `functions.php` as page template file) still persists. I'll try to post it on trac, haven't done it yet. Greetings!
- 0
- 2011-02-27
- chodorowicz
-
@MikeSchinkel - yatiene unparche :) http://core.trac.wordpress.org/ticket/16689@MikeSchinkel - it already has a patch :) http://core.trac.wordpress.org/ticket/16689
- 1
- 2011-02-28
- chodorowicz
-
@chodorowicz - Sí,mi comentarioestaba abordandoelproblema real,evitando que WPintente leer `functions.php` y/opermitiéndoleescribir unganchopara cambiar se devuelve.Me alegra ver queencontró unparcheen lugar de duplicarlo;estan difícilencontraresosboletosexistentes.@chodorowicz - Yes, my comment was addressing the real problem, keeping WP from trying to read `functions.php` and/or allowing you to write a hook to change was is returned. Glad to see you found a patch rather than duplicate it; it's so hard to find those existing tickets.
- 0
- 2011-02-28
- MikeSchinkel
-
^es decir.tomóel código demi respuesta y loenvolvióen un complemento.E hicistetodoeso sin darningún crédito al origen,ni amíni al stackexchange de WP ... agradable ...:/^ ie. you took the code from my answer and wrapped it into a plugin. And you did all that without providing any credit to the origin, neither myself or the WP stackexchange... nice... :/
- 4
- 2014-03-30
- t31os
-
9 respuestas
- votos
-
- 2011-04-09
aparentementeestoes suficiente:
add_action('wp_head', 'show_template'); function show_template() { global $template; echo basename($template); }
o simplemente úselo directamenteen laplantilla (tiendo a hacerecoen footer.phpen el comentario HTML)
<?php global $template; echo basename($template); ?>
apparently this is enough:
add_action('wp_head', 'show_template'); function show_template() { global $template; echo basename($template); }
or just use it directly in template (I tend to echo in footer.php in HTML comment)
<?php global $template; echo basename($template); ?>
-
Esonofuncionará conget-template-part solopara que lo sepas,solomuestra single.php (porejemplo) ynoel archivoen el que seencuentra.That won't work with get-template-part just so you know, it only shows single.php (for example) and not the file it is in.
- 1
- 2012-09-25
- m-torin
-
Sí,es verdad.Para obtenerelnombre del archivoincluido,probablementenecesite usar algo comoesto `echo __FILE __;`Yes, it's true. To get the name of included file you'd probably need to use something like this `echo __FILE__;`
- 0
- 2012-10-05
- chodorowicz
-
estoestábien,porejemplo,en los casosen quemodifica laplantillapredeterminada sin asignarla a unapublicaciónen elbackoffice.Porejemplo,usando rutaspersonalizadas yelfiltrotemplate_include.Gracias.this is fine, for example in cases when you modify the default template without assigning it to a post in backoffice. For example using custom routes and the template_include filter. Thank you.
- 0
- 2016-09-15
- Luca Reghellin
-
¿Cómopodría haceresto dentro de un ciclo?Estoyintentandoenviar la URL a unapágina de cada archivo deplantilla.How could I do this within a loop? I'm trying to output the URL to one page of each template file.
- 0
- 2017-02-28
- JacobTheDev
-
@JacobTheDevtal vez use `echo __FILE__` -porqueestonofuncionará,solomuestra laplantillainicialprincipal@JacobTheDev maybe using `echo __FILE__` - because this won't work, it displays only main, initial template
- 0
- 2017-03-07
- chodorowicz
-
- 2011-02-27
Puedeestablecer una variableglobal duranteelfiltro
template_include
y luego verificaresa variableglobalpara ver quéplantilla se haincluido.Naturalmente,no querrá la ruta completajunto conel archivo,por lo que le recomiendotruncar hastaelnombre del archivo usando lafunción
basename
de PHP.Código deejemplo:
Dosfunciones,unapara configurar laglobal,otraparainvocarla.add_filter( 'template_include', 'var_template_include', 1000 ); function var_template_include( $t ){ $GLOBALS['current_theme_template'] = basename($t); return $t; } function get_current_template( $echo = false ) { if( !isset( $GLOBALS['current_theme_template'] ) ) return false; if( $echo ) echo $GLOBALS['current_theme_template']; else return $GLOBALS['current_theme_template']; }
Luego,puede llamar a
get_current_template
donde lonecesiteen los archivos deltema,teniendoen cuenta queesto,naturalmente,debe ocurrir después de que se haya activado la accióntemplate_include
(nonecesitarápreocuparseporesto si la llamada se realiza dentro de un archivo deplantilla).Para lasplantillas depáginaexiste
is_page_template()
,teniendoen cuenta que solo ayudaráen el caso de lasplantillas depágina (unafunciónmuchomenor de atrapartodo ).Información sobre lasfunciones utilizadas omencionadas anteriormente:
You could set a global variable during the
template_include
filter and then later check that global vairable to see which template has been included.You naturally wouldn't want the complete path along with the file, so i'd recommend truncating down to the filename using PHP's
basename
function.Example code:
Two functions, one to set the global, one to call upon it.add_filter( 'template_include', 'var_template_include', 1000 ); function var_template_include( $t ){ $GLOBALS['current_theme_template'] = basename($t); return $t; } function get_current_template( $echo = false ) { if( !isset( $GLOBALS['current_theme_template'] ) ) return false; if( $echo ) echo $GLOBALS['current_theme_template']; else return $GLOBALS['current_theme_template']; }
You can then call upon
get_current_template
wherever you need it in the theme files, noting this naturally needs to occur after thetemplate_include
action has fired(you won't need to worry about this if the call is made inside a template file).For page templates there is
is_page_template()
, bearing in mind that will only help in the case of page templates(a far less catch all function).Information on functions used or referenced above:
-
- 2013-03-01
Entre lasfuncionesnativas de WP como get_template_part () y las característicasnativas de PHP,laformamás confiable de ver los archivos deltema usadosesbuscarlista detodos los archivosincluidos yfiltra lo quenopertenezca altema (otemas cuando se usa la combinación depadree hijo):
$included_files = get_included_files(); $stylesheet_dir = str_replace( '\\', '/', get_stylesheet_directory() ); $template_dir = str_replace( '\\', '/', get_template_directory() ); foreach ( $included_files as $key => $path ) { $path = str_replace( '\\', '/', $path ); if ( false === strpos( $path, $stylesheet_dir ) && false === strpos( $path, $template_dir ) ) unset( $included_files[$key] ); } var_dump( $included_files );
Between native WP functions like get_template_part() and PHP's native includes the most reliable way to see theme's files used is to fetch list of all included files and filter out whatever doesn't belong to theme (or themes when parent and child combination is used):
$included_files = get_included_files(); $stylesheet_dir = str_replace( '\\', '/', get_stylesheet_directory() ); $template_dir = str_replace( '\\', '/', get_template_directory() ); foreach ( $included_files as $key => $path ) { $path = str_replace( '\\', '/', $path ); if ( false === strpos( $path, $stylesheet_dir ) && false === strpos( $path, $template_dir ) ) unset( $included_files[$key] ); } var_dump( $included_files );
-
- 2012-09-08
Una adición (códigomás dulce) a otras respuestas aquí.
Nombre deplantilla
Para obtenerelnombre de la plantilla depágina actual,utilice la siguiente línea.
is_page() AND print get_page_template_slug( get_queried_object_id() );
Nombre de archivo
Cuando solo desee repetirel nombre de archivo de laplantilla actual ,siga lo siguiente
Editar: aquíestá lanueva versión del complementoenvueltaen una clase. Muestratantoelnombre del archivo de laplantilla actual comoelnombre del archivo de lajerarquía de laplantillaen elgancho de cierreen laparteinferior de lapágina.
Qué le diceel complemento:
- ¿Laplantillaes delpadre delniño/tema actual?
- ¿Laplantilla sepublica desde una subcarpeta? Sies así: le diceelnombre
- Elnombre del archivo de laplantilla.
Simplemente copieel siguiente códigoen un archivo y asígneleelnombre
wpse10537_template_info.php
,cárgueloen su directorio de complementos y actívelo.<?php /** Plugin Name: (#10537) »kaiser« Get Template file name */ if ( ! class_exists( 'wpse10537_template_name' ) ) { add_action( 'plugins_loaded', array( 'wpse10537_template_name', 'init' ) ); class wpse10537_template_name { protected static $instance; public $stack; public static function init() { is_null( self :: $instance ) AND self :: $instance = new self; return self :: $instance; } public function __construct() { if ( is_admin() ) return; add_action( 'wp', array( $this, 'is_parent_template' ), 0 ); add_action( 'wp', array( $this, 'get_template_file' ) ); add_action( 'template_include', array( $this, 'get_template_name' ) ); add_action( 'shutdown', array( $this, 'get_template_name' ) ); } public function get_template_name( $file ) { if ( 'template_include' === current_filter() ) { $this->to_stack( "Template file" ,basename( $file ) ); return $file; } // Return static var on echo call outside of filter if ( current_user_can( 'manage_options' ) AND defined( 'WP_DEBUG' ) AND WP_DEBUG ) return print implode( " – ", $this->stack ); } public function get_template_file() { if ( ! is_post_type_hierarchical( get_post_type() ) ) return; $slug = get_page_template_slug( get_queried_object_id() ); if ( ! strstr( $slug, "/" ) ) return $this->to_stack( "Template", $slug ); $this->to_stack( "Subdirectory" ,strstr( $slug, "/", true ) ); $this->to_stack( "Template (in subdirectory)" ,str_replace( "/", "", strstr( $slug, "/" ) ) ); } public function is_parent_template() { if ( ! is_null( wp_get_theme()->parent ) ) return $this->to_stack( 'from parent theme' ); $this->to_stack( 'from current/child theme' ); } public function to_stack( $part, $item = '' ) { $this->stack[] = "{$part}: {$item}"; } } // END Class wpse10537_template_name } // endif;
Este complementotambién sepuedeejecutar como MU-Complemento.
Luego,puede simplemente llamar a
wpse10537_get_template_name()
en cualquierpunto (porejemplo,en unaplantilla detema). Estoevita saturarelespacio denombresglobal.An addition (more sweet code) to other answers here.
Template Name
To just get the current page template name, use the following line.
is_page() AND print get_page_template_slug( get_queried_object_id() );
File Name
When you just want to echo the current template file name, go with the following
Edit: Here's the new version of the plugin wrapped up in a class. It shows both the current template file name, as well as the template hierarchy file name in the shutdown hook at the most bottom of the page.
What the plugin tells you:
- Is the template from the parent of child/current theme?
- Is the template served from a subfolder? If yes: Tells you the name
- The template file name.
Just copy the following code into a file and name it
wpse10537_template_info.php
, upload it to your plugins directory and activate it.<?php /** Plugin Name: (#10537) »kaiser« Get Template file name */ if ( ! class_exists( 'wpse10537_template_name' ) ) { add_action( 'plugins_loaded', array( 'wpse10537_template_name', 'init' ) ); class wpse10537_template_name { protected static $instance; public $stack; public static function init() { is_null( self :: $instance ) AND self :: $instance = new self; return self :: $instance; } public function __construct() { if ( is_admin() ) return; add_action( 'wp', array( $this, 'is_parent_template' ), 0 ); add_action( 'wp', array( $this, 'get_template_file' ) ); add_action( 'template_include', array( $this, 'get_template_name' ) ); add_action( 'shutdown', array( $this, 'get_template_name' ) ); } public function get_template_name( $file ) { if ( 'template_include' === current_filter() ) { $this->to_stack( "Template file" ,basename( $file ) ); return $file; } // Return static var on echo call outside of filter if ( current_user_can( 'manage_options' ) AND defined( 'WP_DEBUG' ) AND WP_DEBUG ) return print implode( " – ", $this->stack ); } public function get_template_file() { if ( ! is_post_type_hierarchical( get_post_type() ) ) return; $slug = get_page_template_slug( get_queried_object_id() ); if ( ! strstr( $slug, "/" ) ) return $this->to_stack( "Template", $slug ); $this->to_stack( "Subdirectory" ,strstr( $slug, "/", true ) ); $this->to_stack( "Template (in subdirectory)" ,str_replace( "/", "", strstr( $slug, "/" ) ) ); } public function is_parent_template() { if ( ! is_null( wp_get_theme()->parent ) ) return $this->to_stack( 'from parent theme' ); $this->to_stack( 'from current/child theme' ); } public function to_stack( $part, $item = '' ) { $this->stack[] = "{$part}: {$item}"; } } // END Class wpse10537_template_name } // endif;
This plugin can run as MU-Plugin too.
You can then simply call
wpse10537_get_template_name()
at any point (in for example a theme template). This avoids cluttering the global namespace.-
`template_redirect`nopasanada,creo que seestá confundiendo con`template_include`.También comprobaría siestá dentro delfiltroen lugar de si la varestáticaestá llena.Si algún código decideejecutar hookmástiempo,puede arruinar las cosas.`template_redirect` is not passing anything, I think you are confusing with `template_include`. Also I'd check if inside the filter instead of if static var filled. If some code decides to run hook additional time it can wreck things.
- 1
- 2012-09-15
- Rarst
-
@Rarst Hecho/Fijo.Graciaspor lapista ypor señalarelnombre delfiltro.@Rarst Done/Fixed. Thanks for the hint and pointing out the filter name.
- 0
- 2012-09-15
- kaiser
-
- 2011-02-26
Elnombre de laplantilla se almacenaen latablapostmeta,por lo quetodo lo quenecesita haceresponerestoen algún lugar de su ciclo:
$template = get_post_meta( $post->ID, '_wp_page_template', true ); echo "Template: " . $template;
The template name is stored in the postmeta table, so all you need to do is put this somewhere in your loop:
$template = get_post_meta( $post->ID, '_wp_page_template', true ); echo "Template: " . $template;
-
Sí,lo sé,peroelproblemaes que solofunciona cuando unapáginatiene unaplantillaestablecida.Lobueno del código quepubliquées quete dirá si lapágina actual usa `front-page.php`,`index.php`,`single.php`,`page.php` o cualquier otro archivo.Su códigomuestraelnombre de laplantilla solopara laspáginas con unaplantilla depáginapersonalizada.Yes, I know about this, but the problem is that it works only when a page has a set template. The cool thing about the code I posted is that it will tell you if current page is using `front-page.php`, `index.php`, `single.php`, `page.php` or any other file. Your code displays template name only for pages with custom page template.
- 2
- 2011-02-26
- chodorowicz
-
ah,lo siento,noentendíbien tupregunta.ah, sorry - my misunderstanding of your question.
- 0
- 2011-02-26
- Simon Blackbourn
-
@SimonBlackbourn Es una ayudaparami requerimiento.Gracias.@SimonBlackbourn It's help for my requirement. Thanks.
- 0
- 2013-10-08
- KarSho
-
- 2013-05-01
Estono abordatodas laspreguntas del OP,peroel código a continuaciónes ciertamentemáselegante que lasexpresiones regulares yel análisis del archivo deplantillaen sí.
Siestáen unapágina que usa unaplantilla depágina y desea obtenerelnombre de laplantilla depágina (es decir,elnombre legiblepor humanos que definióen los comentariosen laparte superior de su archivo PHP deplantilla),puedes usarestapequeñapepita:
if ( is_page() && $current_template = get_page_template_slug( get_queried_object_id() ) ){ $templates = wp_get_theme()->get_page_templates(); $template_name = $templates[$current_template]; }
Quería obtenerelnombre de laplantillaporqueestaba realmente harto de losnombres de clasetontos y largos que lafunciónincorporada de WordPress
body_class
crea cuandoestás usando unaplantilla. Afortunadamente,hay ungancho defiltro alfinal deesafunción que lepermite agregar suspropiosnombres de clasetambién. Aquíestámi filtro. Espero que alguien loencuentre útil:add_filter( 'body_class', 'gs_body_classes', 10, 2 ); function gs_body_classes( $classes, $class ){ if ( is_page() && $current_template = get_page_template_slug( get_queried_object_id() ) ){ $templates = wp_get_theme()->get_page_templates(); $template_name = str_replace( " ", "-", strtolower( $templates[$current_template] ) ); $classes[] = $template_name; } return $classes; }
Estefiltrotomaráelnombre que le hayas dado atuplantilla depágina,reemplazará losespacios conguiones y hará quetodo seaen minúsculaspara que se vea comotodas las otras clases de WordPress.
This doesn't address all of the OP's question, but the code below is certainly more elegant than regular expressions and parsing the template file itself.
If you're on a Page that is using a Page Template, and you want to get the page template's Name (ie: the human-readable name that you defined in the comments at the top of your template PHP file), you can use this little nugget:
if ( is_page() && $current_template = get_page_template_slug( get_queried_object_id() ) ){ $templates = wp_get_theme()->get_page_templates(); $template_name = $templates[$current_template]; }
I wanted to get the template name because I was really sick of the silly-long-ass class names that the built-in WordPress
body_class
function creates when you're using a template. Luckily there's a filter hook at the very end of that function to let you append your own class names as well. Here's my filter. Hope someone finds it useful:add_filter( 'body_class', 'gs_body_classes', 10, 2 ); function gs_body_classes( $classes, $class ){ if ( is_page() && $current_template = get_page_template_slug( get_queried_object_id() ) ){ $templates = wp_get_theme()->get_page_templates(); $template_name = str_replace( " ", "-", strtolower( $templates[$current_template] ) ); $classes[] = $template_name; } return $classes; }
This filter will take whatever you named your page template, replace spaces with dashes and make everything lower case so it looks like all the other WordPress classes.
-
- 2011-02-26
Hay unproblema con la línea
preg_match_all
.Pruebaestoen su lugar:preg_match_all("/Template Name:(.*)\n/siU",$template_contents,$template_name);
Además,puede usar
if (!is_admin()) { .... }
paraejecutar cosas soloen lainterfaz.There's an issue with the
preg_match_all
line. Try this instead:preg_match_all("/Template Name:(.*)\n/siU",$template_contents,$template_name);
Also, you can use
if (!is_admin()) { .... }
to run things on the frontend only.-
Graciaspor la sugerencia,no resuelvenelproblema,perome orientaron hacia las soluciones.Resulta que WP,mientrasgenera la lista deplantillas,buscainclusoen `functions.php`encuentrael` "/Nombre de laplantilla: (. *) \ N/siU" `y,por lotanto,tratael`functions.php` como un archivo deplantilla.Creo queestees unerror de WP,ni siquiera deberíamirareste archivo.La solución:muevael archivo al subdirectorio.Thanks for suggestion, they don't solve the problem, but they kinda directed me into solutions. It turns out that WP, while generating templates list, is looking even into `functions.php` finds the `"/Template Name:(.*)\n/siU"` and thus treats the `functions.php` as template file. I think this is WP bug, it shouldn't even look at this file. The solution: move the file into subdirectory.
- 0
- 2011-02-26
- chodorowicz
-
@chodorowicz: Esonoes unerroren WP,es unerroren sufunción.@chodorowicz: That's not a bug in WP, it's a bug in your function.
- 0
- 2011-02-26
- wyrfel
-
Básicamente,WP leprohíbeponer la cadena "Nombre deplantilla:" (inclusoen el comentario)en el archivo `functions.php`.Paramí,personalmente,esoes unerror (pequeño,pero detodosmodos),peroesoes lo queestáen discusión,supongo.Creo queno sepuede decir que lafunciónen sítengaerrores.So basically WP forbids you to put string "Template Name:" (even in comment) in `functions.php` file. For me, personally, that's a bug, (small, but anyway) but that's the up to discussion, I suppose. I think you cannot say that the function itself is buggy.
- 0
- 2011-02-26
- chodorowicz
-
WPnote prohíbe hacernada.Pero WPtampoco lepromete quepuede recorrer un debug_backtrace ()para averiguar qué archivo deplantillaestá usando.El hecho de que lo hayaencontradoen unforo de soporte de WPno significa que sea un código oficialmente compatible.Comopuede ver,sufunciónexplícitamenteexpluyefooter.php.Tambiénpuede agregar otra condición queexcluyafunctions.php.Por cierto: sufunciónnobuscael `Nombre deplantilla` dentro de cada uno de los archivos,su ciclo haterminadomucho antes deeso.WP doesn't forbid you to do anything. But WP also doesn't promise you that you can loop over a debug_backtrace() to find out what template file you're using. Just because you found it on a WP support forum doesn't mean it's officially supported code. As you may see, your function explicitly expludes footer.php. You may as well add another condition that excludes functions.php. BTW: your function doesn't look for `Template Name` within each of the files, your loop has ended long before that.
- 0
- 2011-02-27
- wyrfel
-
Elproblemanofue con `debug_backtrace ()` - Puedoeliminartodoel código y dejar simplemente `preg_match_all ("/Nombre deplantilla ... `,oincluso solo`//Nombre deplantilla: `y WPtrata lasfunciones de`.php` como archivo deplantilla,perograciaspor los comentarios,estees unproblematan singular que,como usted dice,noesjusto decir quees unerror. La soluciónt31oses limpia y resuelvetodoelproblema.The problem wasn't with `debug_backtrace()` - I can remove all the code and just leave `preg_match_all("/Template Name...`, or even just `// Template Name:` and WP treats then `functions.php` as template file, but thanks for comments - this is such a unique problem that, as you say, it's not fair to say it's a bug. t31os solution is clean and solves the whole issue. Greets.
- 0
- 2011-02-27
- chodorowicz
-
- 2017-09-15
Juegajunto con:
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>';
Escritoen:
¿Cómopuede saber quépágina deplantillaestámostrando lapágina actual?
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.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 renderizaresta líneaen elmomento adecuado.No devuelveel archivo deplantilla "actual",sinotodoel actualen usopara la carga depágina actual. Tal vez "cortar" con cierta lógicaesaidea .
La clave
get_included_files()
"last"esel último archivoincluido registrado,probablementeel último archivo/parte deplantilla usadoen elpie depáginaporel widget debarra lateral o algo así. Probablemente,porque varios archivosincluidosno se vuelven a registrar/rellenar denuevoen get_included_files ().De lo contrario, laintención debe ser clarapara hackearesteproblema . No hayforma de que un archivoincluido seinforme comoincluido hasta que se hayaincluido . Entoncesesprobable que sea demasiadotardepara usarelescenario.
Lamayorparte del "tiempo" le le legustaría:
$template = get_current_loaded_template(); if($template == 'single-product.php') add_filter('the_title' .... if($template == 'format-gallery.php') add_action('post_thumbnail' ....
Peroesonoesposible si laplantilla se cargafuera delmétodoprincipal de Wordpress de
get_template_part
. ¡En su lugar,rediseñe susnecesidades! Tal vezloop_start()
,in_the_loop()
yadd_action('the_post')
tenga la solución que desea,para alterar los datos dependiendo de laplantilla que va a cargarpara cadaentrada dentro de unbucle.Play along with:
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>';
Written at:
How do you find out which template page is serving the current page?
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.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 render this line at the right moment.It does not returning the "current" template-file, but all the current in use for the current page-load. Maybe "cut out" with some logic from that idea.
The
get_included_files()
"last" key is the last registered included file, propably the last template-file/ -part used in the footer by sidebar widget or something. Propably, cos mutiple included files does not re-register/ populates again in get_included_files().Otherwise, the intension must be clear to hack this problem. There is no way for a included file to report itself as included, until it has been included. Then its propably to late to use the scenario.
Most of the "time" you would like:
$template = get_current_loaded_template(); if($template == 'single-product.php') add_filter('the_title' .... if($template == 'format-gallery.php') add_action('post_thumbnail' ....
But thats not possible if the template is loaded outside Wordpress core method of
get_template_part
. Re-design your needs instead! Maybeloop_start()
,in_the_loop()
andadd_action('the_post')
has the solution you want, to alter data depending of template thats gonna load for each entry within a loop. -
Encontréestoparamostrarelnombre actual del archivo usadoen laplantilla:
Fuente: obtenerelnombre de laplantilla depáginaen unapágina
Funcionabastantebien,excepto queen elbackend,en el cuadro de selección deplantilla,obtengoestafeaentrada adicional:
¿Alguientiene algunaidea de cómo solucionarlo? Ni siquiera sépor qué se llama aestafunciónen elbackend. ¿Existe unafunción condicional como
is_frontend()
? ¿Quizásesto resolveríaelproblema?