Name der aktuellen Vorlagendatei abrufen
-
-
@chodorowicz - Obwohlicheinen Schritt vor dem Aufruf der Auswahl von `functions.php` als Fehler aufhören werde,stimmeich Ihrer Prämisse vollständig zu.Um die Sachenoch schlimmer zumachen,habeich den WordPress-Kerncodegescannt und ungefähr 5 Stellengefunden,an deneneseinen Hakengeben könnte,mit dem Sie dieses Problem lösen können,aberich habe keinegefunden.Ich würde vorschlagen,ein Ticket auf http://core.trac.wordpress.org zu veröffentlichen.@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 - dankefür den Kommentar,aber löst `template_include` hook,dent31os vorgeschlagen hat,das Problemnicht?Oder vielleicht habeich dichmissverstanden.@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 - Du hastmichjetzt sehr verwirrt.Die Antwort @t31os hatein Problemgelöst,das sich stark von dem unterscheidet,von demich verstanden habe,dass Siees aufgrund Ihrer Frage und Ihrernachfolgenden Kommentare zu den Antworten anderergestellt haben.Aber wenn die Antwort von @t31os Ihrtatsächliches Bedürfnisgelöst hat,istmeine Verwirrung hier unwichtig,da Ihre Fragebeantwortet wurde.@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
-
Ja,dietatsächliche Notwendigkeitbestand darin,den Namen der aktuell verwendeten Themendatei anzuzeigen. Der vonmir veröffentlichte Code hatteeinen Fehler (derbehoben werden kann,indem die Funktion aus dem Hauptthemaordner verschoben wird),aber die Lösung von @t31osist viel sauberer underfüllt die Anforderung,aber wennich Sie richtig verstehe,bleibt daseigentliche Problem (WP solltenicht versuchen,`functions.php` als Seitenvorlagendatei zu lesen) weiterhinbestehen.Ich werde versuchen,es auftrac zuposten,habeesnochnichtgetan.Schöne Grüße!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 -es hatbereitseinen Patch :) 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 - Ja,mein Kommentarbefasste sichmit demeigentlichen Problem. Es wurde zurückgegeben,dass WPnicht versucht hat,"functions.php" zu lesen,und/oder dass Sieeinen Hook zum Ändern schreiben können.Schön zu sehen,dass Sieeinen Patchgefunden haben,anstattihn zu duplizieren.Esist so schwer,diese vorhandenen Tickets zufinden.@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
-
^ dh.Sie haben den Code ausmeiner Antwortgenommen undin ein Plugineingewickelt.Und du hast das allesgetan,ohne den Ursprung anzuerkennen,wederichnoch der WP-Stapelaustausch ...nett ...:/^ 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 Antworten
- Stimmen
-
- 2011-04-09
anscheinendist dasgenug:
add_action('wp_head', 'show_template'); function show_template() { global $template; echo basename($template); }
oder verwenden Sieeseinfach direktin der Vorlage (ichneige dazu,in footer.phpim HTML-Kommentar zu widerhallen)
<?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); ?>
-
Dasfunktioniertnichtmit get-template-part,nur damit Sie wissen,es zeigtnur single.php (zum Beispiel) undnicht die Datei,in deres sichbefindet.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
-
Ja,esist wahr.Um den Namen derenthaltenen Datei zuerhalten,müssten Sie wahrscheinlich soetwas wie "echo __FILE __;" verwendenYes, 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
-
Diesistin Ordnung,beispielsweisein Fällen,in denen Sie die Standardvorlage ändern,ohne sieeinem Beitragim Backoffice zuzuweisen.Verwenden Siebeispielsweisebenutzerdefinierte Routen und den Filtertemplate_include.Vielen Dank.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
-
Wie könnteich dasinnerhalbeiner Schleifetun?Ich versuche,die URL aufeine Seitejeder Vorlagendatei auszugeben.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 verwendetmöglicherweise `echo __FILE__` - da diesnichtfunktioniert,wirdnur dieerste Hauptvorlage angezeigt@JacobTheDev maybe using `echo __FILE__` - because this won't work, it displays only main, initial template
- 0
- 2017-03-07
- chodorowicz
-
- 2011-02-27
Sie könneneine globale Variable während des Filters
template_include
festlegen und später überprüfen,ob dieseglobale Variable verfügbarist,umfestzustellen,welche Vorlageenthaltenist.Siemöchtennatürlichnicht den vollständigen Pfad zusammenmit der Datei,daher würdeichempfehlen,mit der PHP-Funktion
basename
auf den Dateinamen zu kürzen.Beispielcode:
Zwei Funktionen,eine zum Festlegen des Globalen undeine zum Aufrufen.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']; }
Sie können dann
get_current_template
überall dort aufrufen,wo Sieesin den Themendateienbenötigen. Beachten Sie,dass diesnatürlichnach dem Auslösen der Aktiontemplate_include
erfolgenmuss (diesistnichterforderlich) Siemüssen sich darüber Sorgenmachen,wenn der Aufrufin einer Vorlagendateierfolgt.Für Seitenvorlagengibt es
is_page_template()
,wobei zuberücksichtigenist,dass diesnurbei Seitenvorlagen hilfreichist (eine weitausgeringere catch all -Funktion).Informationen zu den oben verwendeten odergenannten Funktionen:
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
Zwischennativen WP-Funktionen wie get_template_part () und PHPsnativen Funktionen können Sie die Dateien des Themas am zuverlässigsten abrufenListe allerenthaltenen Dateien undfiltern Sie heraus,wasnicht zum Themagehört (oder Themen,wenn die Kombination aus Eltern und Kind verwendet wird):
$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
Eine Ergänzung (süßerer Code) zu anderen Antworten hier.
Vorlagenname
Verwenden Sie diefolgende Zeile,umnur den aktuellen Namen der Seitenvorlage abzurufen.
is_page() AND print get_page_template_slug( get_queried_object_id() );
Dateiname
Wenn Sienur den aktuellen Vorlagendateinamen wiedergebenmöchten,gehen Sie wiefolgt vor
Bearbeiten: Hierist dieneue Version des Plugins,diein einer Klasse zusammengefasstist. Es zeigt sowohl den aktuellen Namen der Vorlagendatei als auch den Dateinamen der Vorlagenhierarchieim Shutdown-Hook am Ende der Seite an.
Was das Plugin Ihnen sagt:
- Ist die Vorlage vom Elternteil des Kindes/aktuellen Themas?
- Wird die Vorlage auseinem Unterordnerbereitgestellt? Wennja: Sagt Ihnen den Namen
- Der Name der Vorlagendatei.
Kopieren Sieeinfach denfolgenden Codein eine Datei undnennen Sieihn
wpse10537_template_info.php
,laden Sieihnin Ihr Plugins-Verzeichnis hoch und aktivieren Sieihn.<?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;
Dieses Plugin kann auch als MU-Plugin ausgeführt werden.
Sie können danneinfach
wpse10537_get_template_name()
jederzeit aufrufen (z. B.in einer Themenvorlage). Dadurch wird vermieden,dass derglobale Namespace überladen wird.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` übergibtnichts,ich denke,Sie verwechselnmit`template_include`.Außerdem würdeichprüfen,obim Filter statt statische Variablengefüllt sind.Wennein Codebeschließt,die Hook-zusätzliche Zeit auszuführen,kann dies zu Problemenführen.`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 Done/Fixed.Vielen Dankfür den Hinweis und den Hinweis auf den Filternamen.@Rarst Done/Fixed. Thanks for the hint and pointing out the filter name.
- 0
- 2012-09-15
- kaiser
-
- 2011-02-26
Der Vorlagenname wirdin der Postmeta-Tabellegespeichert. Siemüssenihn alsonurirgendwoin Ihre Schleifeeinfügen:
$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;
-
Ja,ich weiß davon,aber das Problemist,dassesnurfunktioniert,wenneine Seiteeine festgelegte Vorlage hat.Das Coole an dem Code,denichgepostet habe,ist,dasser Ihnen sagt,ob die aktuelle Seite "front-page.php","index.php","single.php","page.php" odereine andere Datei verwendet.Ihr Code zeigt den Vorlagennamennurfür Seitenmit benutzerdefinierten Seitenvorlagen an.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,sorry -mein Missverständnis deiner Frage.ah, sorry - my misunderstanding of your question.
- 0
- 2011-02-26
- Simon Blackbourn
-
@ SimonBlackbourn Esist Hilfefürmeine Anforderung.Vielen Dank.@SimonBlackbourn It's help for my requirement. Thanks.
- 0
- 2013-10-08
- KarSho
-
- 2013-05-01
Diesbehandeltnicht alle Fragen des OP,aber derfolgende Codeist sicherlicheleganter als reguläre Ausdrücke und das Parsen der Vorlagendatei selbst.
Wenn Sie sich aufeiner Seitebefinden,dieeine Seitenvorlage verwendet,und den Namen der Seitenvorlage abrufenmöchten (dh denfür Menschen lesbaren Namen,den Siein den Kommentaren obenin Ihrer PHP-Vorlagendatei definiert haben),Sie können dieses kleine Nugget verwenden:
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]; }
Ich wollte den Vorlagennamenerhalten,weilich die albernen Klassennamen satt hatte,die dieintegrierte WordPress-Funktion
body_class
erstellt,wenn Sieeine Vorlage verwenden. Glücklicherweisebefindet sichganz am Ende dieser Funktionein Filterhaken,mit dem Sie auch Ihreeigenen Klassennamen anhängen können. Hieristmein Filter. Hoffe,jemandfindetesnützlich: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; }
Dieser Filter verwendet alle von Ihnenbenannten Seitenvorlagen,ersetzt Leerzeichen durch Bindestriche undmacht allesin Kleinbuchstaben,sodasses wie alle anderen WordPress-Klassen aussieht.
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
Esgibt ein Problemmit der Zeile
preg_match_all
.Versuchen Sie stattdessen Folgendes:preg_match_all("/Template Name:(.*)\n/siU",$template_contents,$template_name);
Sie können auch
if (!is_admin()) { .... }
verwenden,um Dingenurim Frontend auszuführen.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.-
Vielen Dankfür den Vorschlag,sie lösen das Problemnicht,aber sie habenmichirgendwie zu Lösungengeführt.Es stellt sich heraus,dass WPbeim Generieren der Vorlagenliste sogarin `functions.php`nach dem` "/Template Name: (. *) \ N/siU" `sucht und somit die`functions.php` als Vorlagendateibehandelt.Ich denke,dasistein WP-Fehler,er sollte sich diese Dateinichteinmal ansehen.Die Lösung: Verschieben Sie die Dateiin das Unterverzeichnis.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: Dasist kein Fehlerin WP,esistein Fehlerin Ihrer Funktion.@chodorowicz: That's not a bug in WP, it's a bug in your function.
- 0
- 2011-02-26
- wyrfel
-
Daher verbietet WP Ihnengrundsätzlich,die Zeichenfolge "Vorlagenname:" (auchim Kommentar)in die Datei "functions.php"einzufügen.Fürmichpersönlichist dasein Fehler (klein,abertrotzdem),aber das steht wohl zur Diskussion.Ich denke,man kannnicht sagen,dass die Funktion selbstfehlerhaftist.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
-
WP verbietet dirnichts zutun.WP verspricht Ihnen aber auchnicht,dass Sieeine debug_backtrace () durchlaufen können,um herauszufinden,welche Vorlagendatei Sie verwenden.Nur weil Sieesin einem WP-Support-Forumgefunden haben,heißt dasnicht,dasses offiziell unterstützter Codeist.Wie Sie vielleicht sehen,erklärt Ihre Funktionfooter.phpexplizit.Sie können aucheine andere Bedingung hinzufügen,diefunctions.php ausschließt.Übrigens: Ihre Funktion suchtnichtin jeder Dateinach "Vorlagenname",Ihre Schleifeist schon lange vorherbeendet.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
-
Das Problem warnichtmit "debug_backtrace ()" -ich kann dengesamten Codeentfernen undeinfach "preg_match_all ("/Template Name ... "oder sogarnur"//Template Name: "lassen und WPbehandelt dann" Funktionen ".php` als Vorlagendatei,aber dankefür die Kommentare - diesistein soeinzigartiges Problem,dasses,wie Sie sagen,nichtfairist zu sagen,dasses sich umeinen Fehler handelt. Die Lösung vont31osist sauber und löst dasgesamte Problem.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
Spielen Siemit:
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>';
Geschrieben am:
Wiefinden Sie heraus,welche Vorlagenseite die aktuelle Seitebedient?
Wenn der Pfad
admin-bar stuff
oben odereine andere Datei angezeigt wird,ändern Sie den Dateinamentemplate-loader.php
in dieser Codezeilein: was auchimmer Dateiname,von dem Sie abbrechenmüssen.Wenn Sie diesin der Admin-Leistebenötigen, verwenden Sie die richtige Priotität (frühestens) ,um sicherzustellen,dass am Ende dieser Liste keine Dateieneingegeben werden. Zum Beispiel:
add_action('admin_bar_menu', 'my_adminbar_template_monitor', -5);
Priorität
-5
Stellen Sie sicher,dasses zuerstgeladen wird. Der Schlüsselist,diese Zeileim richtigen Moment zu rendern.Es wirdnicht die "aktuelle" Vorlagendatei zurückgegeben,sondern dergesamte aktuelle Wert,derfür das aktuelle Laden der Seite verwendet wird. Vielleichtmit einer Logik aus dieser Idee "herausschneiden" .
Der
get_included_files()
"last" -Schlüsselist die zuletzt registrierteeingeschlossene Datei,wahrscheinlich die letzte Vorlagendatei/-teil,diein der Fußzeile vom Seitenleisten-Widget oderetwas anderem verwendet wird. Möglicherweise werdenin get_included_files () cos-mehrfachenthaltene Dateiennichterneut registriert/gefüllt.Andernfallsmuss die Intensität klar sein,um dieses Problem zu hacken . Eineeingeschlossene Datei kann sicherst dann alseingeschlossenmelden,wenn sie aufgenommen wurde. Dannistes wahrscheinlich zu spät,das Szenario zu verwenden.
Diemeiste "Zeit",die Sie möchten :
$template = get_current_loaded_template(); if($template == 'single-product.php') add_filter('the_title' .... if($template == 'format-gallery.php') add_action('post_thumbnail' ....
Diesistjedochnichtmöglich ,wenn die Vorlage außerhalb der Wordpress-Kernmethode von
get_template_part
geladen wird. Gestalten Sie stattdessen Ihre Bedürfnisseneu! Vielleicht habenloop_start()
,in_the_loop()
undadd_action('the_post')
diegewünschte Lösung,um Daten abhängig von der Vorlage zu ändern,die verwendet werden soll Laden Siefürjeden Eintraginnerhalbeiner Schleife.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. -
Ich habefestgestellt,dass hiermit der aktuelle Name derin der Vorlage verwendeten Datei angezeigt wird:
Quelle: Name der Seitenvorlage abrufeneine Seite
Esfunktioniertganzgut,außer dassichim Backendim Vorlagenauswahlfeld diesen hässlichen zusätzlichen Eintragbekomme:
Hatjemandeine Idee,wieman das Problembehebt? Ich weißnichteinmal,warum diese Funktionim Backend aufgerufen wird. Gibteseine bedingte Funktion wie
is_frontend()
-möglicherweise würde dies das Problem lösen?