Récupère le nom du fichier de modèle actuel
-
-
@chodorowicz - Bien queje m'arrête une étape avant d'appeler la sélection de `functions.php` comme unbogue,je seraientièrement d'accord avec votreprémisse.Pour aggraver les choses,j'ai scanné le code debase de WordPresset j'aitrouvéenviron 5endroits oùil auraitpu y avoir un crochetpour vouspermettre degérer ceproblème,maisje n'en aitrouvé aucun.Je suggère deposter unticket sur 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 -mercipour le commentaire,mais le hook `template_include`,qui a suggérét31os,ne résout-ilpas leproblème?Oupeut-être queje vous aimal compris.@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 - Vousm'avezmaintenanttrès confus.La réponse donnéepar @t31os résout unproblèmetrès différent de celui quej'ai compris que vousposiez sur labase de votre questionet de vos commentaires sur les réponses des autres.Mais si la réponse de @t31os a résolu votrebesoin réel,ma confusioniciest sansimportance car votre question a été répondue.@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
-
Oui,lebesoin réel était d'afficher lenom dufichier dethème actuellement utilisé,le code quej'aiposté avait un défaut (quipeut être résoluen déplaçant lafonction hors du dossierprincipal duthème),mais la solution de @t31osestbeaucouppluspropreetrépond aubesoin,mais,sije vous comprendsbien,le vraiproblème (WPne devraitpasessayer de lire `functions.php` commefichier demodèle depage)persiste.J'essaierai de leposter surtrac,je ne l'aipasencorefait.Salutations!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 -il a déjà unpatch :) 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 - Oui,mon commentairetraitait du vraiproblème,empêchant WP d'essayer de lire `functions.php`et/ou vouspermettant d'écrire un hookpour changer a été renvoyé.Heureux de voir que vous aveztrouvé un correctifplutôt que de le dupliquer;ilest si difficile detrouver cesbilletsexistants.@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
-
^ie.vous avezpris le code dema réponseet l'avezenveloppé dans unplugin.Et vous avezfaittout cela sans donner de crédit à l'origine,ni àmoini au WP stackexchange ... sympa ...:/^ 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 réponses
- votes
-
- 2011-04-09
Apparemment,cela suffit:
add_action('wp_head', 'show_template'); function show_template() { global $template; echo basename($template); }
ou simplement l'utiliser directement dans letemplate (j'aitendance àfaire écho dansfooter.php dans les commentaires 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); ?>
-
Celane fonctionnerapas avecget-template-partjustepour que vous le sachiez,iln'affiche que single.php (parexemple)et non lefichier dans lequelil setrouve.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
-
Oui c'est vrai.Pour obtenir lenom dufichierinclus,vous devrezprobablement utiliser quelque chose comme ceci `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
-
cela convient,parexemple dans les cas où vousmodifiez lemodèlepar défaut sans l'affecter à unepublication dans lebackoffice.Parexemple,en utilisant desitinérairespersonnaliséset lefiltretemplate_include.Je vous remercie.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
-
Commentpourrais-jefaire cela dans uneboucle?J'essaye de sortir l'URL sur unepage de chaquefichier demodèle.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
-
@JacobTheDev utilisepeut-être `echo __FILE__` -parce que celane fonctionnerapas,iln'affiche que lemodèleprincipalet initial@JacobTheDev maybe using `echo __FILE__` - because this won't work, it displays only main, initial template
- 0
- 2017-03-07
- chodorowicz
-
- 2011-02-27
Vouspouvez définir une variableglobalependant lefiltre
template_include
,puis vérifier ultérieurement ce vairableglobalpour voir quelmodèle a étéinclus.Naturellement,vousne voudriezpas le chemin complet avec lefichier,doncje vous recommande detronquerjusqu'aunom defichieren utilisant lafonction PHP
basename
.Exemple de code:
Deuxfonctions,unepour définir leglobal,unepour l'invoquer.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']; }
Vouspouvezensuitefaire appel à
get_current_template
partout où vousen avezbesoin dans lesfichiers dethème,en notant que cela doitnaturellement seproduire après le déclenchement de l'actiontemplate_include
(vousn'en aurezpasbesoin s'inquiéter à ce sujet si l'appelesteffectué dans unfichiermodèle).Pour lesmodèles depage,il y a
is_page_template()
,sachant que celane sera utile que dans le cas desmodèles depage (unefonctionbeaucoupmoins catch all ).Informations sur lesfonctions utilisées ou référencées ci-dessus:
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 lesfonctions WPnativestelles que get_template_part () et lenatif de PHP,lemoyen leplusfiable de voir lesfichiers dethème utilisésest de récupérerliste detous lesfichiersincluset filtreztout ce quin'appartientpas authème (ou auxthèmes lorsque la combinaisonparentet enfantest utilisée):
$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
Un ajout (codeplus doux) à d'autres réponsesici.
Nom dumodèle
Pour obtenir uniquement lenom du modèle depage actuel,utilisez la ligne suivante.
is_page() AND print get_page_template_slug( get_queried_object_id() );
Nom dufichier
Si vous souhaitez simplementfaire écho au nom defichier dumodèle actuel ,procédez comme suit
Modifier: Voici lanouvelle version dupluginencapsulée dans une classe. Il affiche à lafois lenom dufichier dumodèle actuel,ainsi que lenom dufichier de la hiérarchie dumodèle dans le crochet d'arrêt aubas de lapage.
Ce que leplugin vous dit:
- Lemodèleprovient-il duparent duthèmeenfant/actuel?
- Lemodèleest-il servi àpartir d'un sous-dossier? Si oui: vous donne lenom
- Lenom dufichier demodèle.
Copiez simplement le code suivant dans unfichieret nommez-le
wpse10537_template_info.php
,téléchargez-le dans votre répertoire depluginset activez-le.<?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;
Cepluginpeut égalementfonctionneren tant que MU-Plugin.
Vouspouvez alors simplement appeler
wpse10537_get_template_name()
àtoutmoment (dansparexemple unmodèle dethème). Cela évite d'encombrer l'espace denomsglobal.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`ne transmet rien,je pense que vous confondez avec`template_include`.Aussije vérifierais si à l'intérieur dufiltre au lieu de si var statique rempli.Si du code décide d'exécuter le hookplus detemps,celapeut ruiner les choses.`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
-
@Rarstfait/corrigé.Mercipour l'indiceet enindiquant lenom dufiltre.@Rarst Done/Fixed. Thanks for the hint and pointing out the filter name.
- 0
- 2012-09-15
- kaiser
-
- 2011-02-26
Lenom dumodèleest stocké dans latablepostmeta,donctout ce que vous avez àfaireest de lemettre quelquepart dans votreboucle:
$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;
-
Oui,je sais à ce sujet,mais leproblèmeest que celane fonctionne que lorsqu'unepage a unmodèle défini.Ce quiest cool avec le code quej'aipublié,c'est qu'il vous dira si lapage actuelle utilise `front-page.php`,`index.php`,`single.php`,`page.php` outout autrefichier.Votre code affiche lenom dumodèle uniquementpour lespages avec unmodèle depagepersonnalisé.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,désolé -mamauvaise compréhension de votre question.ah, sorry - my misunderstanding of your question.
- 0
- 2011-02-26
- Simon Blackbourn
-
@SimonBlackbourn C'est de l'aidepourmonexigence.Merci.@SimonBlackbourn It's help for my requirement. Thanks.
- 0
- 2013-10-08
- KarSho
-
- 2013-05-01
Celane répondpas àtoutes les questions de l'OP,mais le code ci-dessousest certainementplus élégant que lesexpressions régulièreset l'analyse dufichiermodèle lui-même.
Si vous êtes sur unepage qui utilise unmodèle depage,et que vous souhaitez obtenir lenom dumodèle depage (c'est-à-dire: lenom lisiblepar l'homme que vous avez défini dans les commentairesen haut de votrefichier PHP demodèle),vouspouvez utiliser cettepetite pépite:
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]; }
Je voulais obtenir lenom dumodèleparce quej'en avais vraimentmarre desnoms de classeidiots que lafonctionintégrée de WordPress
body_class
crée lorsque vous utilisez unmodèle. Heureusement,il y a un crochet defiltre à latoutefin de cettefonctionpour vouspermettre d'ajouter également vospropresnoms de classe. Voicimonfiltre. J'espère que quelqu'un letrouvera utile: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; }
Cefiltreprendra ce que vous aveznommé votremodèle depage,remplacera lesespacespar destiretset rendratouten minusculespour qu'il ressemble àtoutes les autres classes 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
Il y a unproblème avec la ligne
preg_match_all
.Essayezplutôt ceci:preg_match_all("/Template Name:(.*)\n/siU",$template_contents,$template_name);
Deplus,vouspouvez utiliser
if (!is_admin()) { .... }
pourexécuter des choses uniquement sur lefrontend.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.-
Mercipour la suggestion,ilsne résolventpas leproblème,maisilsm'ont unpeu orienté vers des solutions.Il s'avère que WP,lors de lagénération de la liste desmodèles,cherchemême dans `functions.php`trouve le` "/Nom dumodèle: (. *) \ N/siU" `ettraite ainsi le`functions.php` comme unfichiermodèle.Jepense que c'est unbogue WP,ilne devraitmêmepas regarder cefichier.La solution: déplacez lefichier dans le sous-répertoire.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: Cen'estpas unbogue dans WP,c'est unbogue dans votrefonction.@chodorowicz: That's not a bug in WP, it's a bug in your function.
- 0
- 2011-02-26
- wyrfel
-
Donc,fondamentalement,WP vousinterdit demettre la chaîne "Nom dumodèle:" (mêmeen commentaire) dans lefichier `functions.php`.Pourmoi,personnellement,c'est unbug,(petit,mais quandmême)mais c'est la discussion,je suppose.Jepense que vousne pouvezpas dire que lafonctionelle-mêmeestboguée.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
-
WPne vousinterdit rien.Mais WPne vousprometpasnonplus que vouspouvezboucler sur un debug_backtrace ()pour savoir quelfichier demodèle vous utilisez.Cen'estpasparce que vous l'aveztrouvé sur unforum de support WP que c'est un code officiellementprisen charge.Comme vouspouvez le voir,votrefonctionexpliqueexplicitementfooter.php.Vouspouvez également ajouter une autre condition quiexclutfunctions.php.BTW: votrefonctionne recherchepas `Template Name` dans chacun desfichiers,votreboucle s'estterminéebien avant cela.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
-
Leproblèmen'étaitpas avec `debug_backtrace ()` -je peux supprimertout le codeet laisser simplement `preg_match_all ("/Template Name ... `,oumême simplement`//Template Name: `et WPtraite alors`fonctions.php` commefichiermodèle,maismercipour les commentaires - c'est unproblème si unique que,comme vous le dites,iln'estpasjuste de dire que c'est unbogue.La solutiont31osestpropreet résouttout leproblème.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
Jouez avec:
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>';
Écrit à:
Comment savoir quelmodèle depage diffuse lapage actuelle?
si le chemin de
admin-bar stuff
apparaîten haut,outout autrefichier,changez lenom defichiertemplate-loader.php
dans cette ligne de codeen:peuimportenom defichier dont vous devez rompre.si vousen avezbesoin dans labarre d'administration, utilisez labonnepriorité (auplustôt) pour éviter que desfichiersne soient saisis à lafin de cette liste. Parexemple:
add_action('admin_bar_menu', 'my_adminbar_template_monitor', -5);
priorité
-5
permet de s'assurer qu'il se chargeen premier. La cléest de rendre cette ligne aubonmoment.Ilne retournepas lefichiermodèle "actuel",maistout le courant utilisépour le chargement de lapageen cours. Peut-être "coupé" avec une certaine logique de cetteidée .
La clé "last"
get_included_files()
est le dernierfichierinclusenregistré,probablement le derniermodèle-fichier/-part utilisé dans lepied depagepar le widget de labarre latérale ou quelque chose. Ilestprobable que lesfichiersinclus dans cosmutiplene se réenregistrentpas/ne se remplissentpas ànouveau dansget_included_files ().Sinon, l'intension doit être clairepourpirater ceproblème . Iln’existe aucunmoyenpour unfichierinclus de se signaler commeinclustant qu’iln’apas étéinclus . Ensuite,ilestprobablementtroptardpour utiliser le scénario.
Laplupart dutemps,vous aimeriez :
$template = get_current_loaded_template(); if($template == 'single-product.php') add_filter('the_title' .... if($template == 'format-gallery.php') add_action('post_thumbnail' ....
Mais cen'estpaspossible si lemodèleest chargéen dehors de laméthodeprincipale de Wordpress de
get_template_part
. Re-concevezplutôt vosbesoins! Peut-être queloop_start()
,in_the_loop()
etadd_action('the_post')
a la solution que vous souhaitez,pourmodifier les donnéesen fonction dumodèle chargerpour chaqueentrée dans uneboucle.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. -
J'aitrouvé cecipour afficher lenom actuel dufichier utilisé dans lemodèle:
Source: obtenir lenom dumodèle depage sur unepage
Celafonctionneplutôtbien,sauf que dans lebackend,dans laboîte de sélection dumodèle,j'obtiens cette vilaineentrée supplémentaire:
Quelqu'un a-t-il uneidée de comment y remédier? Jene saismêmepaspourquoi cettefonctionest appelée dans lebackend. Existe-t-il unefonction conditionnelle comme
is_frontend()
-peut-être que cela résoudrait leproblème?