現在のテンプレートファイルの名前を取得します
-
-
@ chodorowicz-`functions.php`の選択をバグとして呼び出す手前で一歩停止しますが、私はあなたの前提に完全に同意します.さらに悪いことに、WordPressのコアコードをスキャンしたところ、この問題を処理するためのフックがあった可能性のある場所が5つほど見つかりましたが、見つかりませんでした.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-コメントに感謝しますが、t31osが提案した `template_include`フックは問題を解決しませんか?または多分私はあなたを誤解しました.@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-あなたは今私を非常に混乱させています.@t31osが与えた回答は、あなたの質問と他の回答へのフォローアップコメントに基づいてあなたが尋ねていたと私が理解したものとは非常に異なる問題を解決します.しかし、@t31osの回答があなたの実際のニーズを解決した場合、あなたの質問は回答されているので、ここでの私の混乱は重要ではありません.@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
-
はい、実際に必要なのは現在使用されているテーマファイルの名前を表示することでした.私が投稿したコードには欠陥がありました(関数をメインテーマフォルダーから移動することで解決できます)が、@t31osのソリューションははるかにクリーンでニーズを満たしますが、私があなたを正しく理解していれば、本当の問題(WPはページテンプレートファイルとして `functions.php`を読み取ろうとすべきではありません)はまだ続きます.私はそれをtracに投稿しようとしますが、まだ行っていません.ご挨拶!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-すでにパッチがあります:)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-はい、私のコメントは実際の問題に対処しており、WPが `functions.php`を読み取ろうとしないようにしたり、変更するためのフックを記述できるようにしたりしました.パッチを複製するのではなく、見つけてくれてうれしいです.それらの既存のチケットを見つけるのはとても難しいです.@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
-
^すなわち.あなたは私の答えからコードを取り出し、それをプラグインにラップしました.そして、あなたはオリジンにクレジットを提供することなく、私自身もWPスタックエクスチェンジも...いい...:/^ 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 回答
- 投票
-
- 2011-04-09
どうやらこれで十分です:
add_action('wp_head', 'show_template'); function show_template() { global $template; echo basename($template); }
またはテンプレートで直接使用します(HTMLコメントのfooter.phpにエコーする傾向があります)
<?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); ?>
-
これはget-template-partでは機能しません.ご存知のとおり、single.php(たとえば)のみが表示され、ファイルは表示されません.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
-
はい、それは本当だ.含まれているファイルの名前を取得するには、おそらく次のようなものを使用する必要があります `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
-
これは問題ありません.たとえば、バックオフィスの投稿に割り当てずにデフォルトのテンプレートを変更する場合などです.たとえば、カスタムルートとtemplate_includeフィルターを使用します.ありがとうございました.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
-
ループ内でこれを行うにはどうすればよいですか?各テンプレートファイルの1ページにURLを出力しようとしています.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はおそらく `echo __FILE__`を使用しています-これは機能しないため、メインの初期テンプレートのみが表示されます@JacobTheDev maybe using `echo __FILE__` - because this won't work, it displays only main, initial template
- 0
- 2017-03-07
- chodorowicz
-
- 2011-02-27
template_include
フィルタでグローバル変数を設定し、後でそのグローバル変数をチェックして、どのテンプレートが含まれているかを確認できます.当然、ファイルと一緒に完全なパスは必要ないので、PHPの
basename
関数を使用してファイル名まで切り捨てることをお勧めします.サンプルコード:
2つの関数.1つはグローバルを設定し、もう1つはグローバルを呼び出すためのものです.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']; }
次に、テーマファイル内の必要な場所で
get_current_template
を呼び出すことができます.これは、template_include
アクションが実行された後に自然に発生する必要があることに注意してください(必要ありません).テンプレートファイル内で呼び出しが行われる場合は、これについて心配する必要があります.ページテンプレートの場合、
is_page_template()
があります.これは、ページテンプレートの場合にのみ役立つことを念頭に置いてください(すべてをキャッチする関数ははるかに少ない).上記で使用または参照されている関数に関する情報:
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
get_template_part()などのネイティブWP関数とPHPのネイティブには、使用されているテーマのファイルを確認するための最も信頼性の高い方法が含まれています.含まれているすべてのファイルのリストを作成し、テーマ(または親子の組み合わせが使用されている場合はテーマ)に属していないものをすべて除外します.
$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
ここで他の回答への追加(より甘いコード).
テンプレート名
現在のページテンプレートの名前を取得するには、次の行を使用します.
is_page() AND print get_page_template_slug( get_queried_object_id() );
ファイル名
現在のテンプレートファイル名をエコーするだけの場合は、次のようにします
編集:これがクラスにラップされたプラグインの新しいバージョンです.現在のテンプレートファイル名と、ページの最下部にあるシャットダウンフックのテンプレート階層ファイル名の両方が表示されます.
プラグインの内容:
- 子/現在のテーマの親からのテンプレートですか?
- テンプレートはサブフォルダーから提供されますか?はいの場合:名前を教えてください
- テンプレートファイル名.
次のコードをファイルにコピーして
wpse10537_template_info.php
という名前を付け、プラグインディレクトリにアップロードしてアクティブ化します.<?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;
このプラグインはMUプラグインとしても実行できます.
その後、いつでも(たとえば、テーマテンプレートで)
wpse10537_get_template_name()
を呼び出すことができます.これにより、グローバル名前空間が乱雑になるのを防ぎます.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`は何も渡していないので、`template_include`と混同していると思います.また、静的変数が入力されているかどうかではなく、フィルター内にあるかどうかを確認します.一部のコードがフックをさらに実行することを決定した場合、それは物事を破壊する可能性があります.`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完了/修正済み.ヒントとフィルター名を指摘してくれてありがとう.@Rarst Done/Fixed. Thanks for the hint and pointing out the filter name.
- 0
- 2012-09-15
- kaiser
-
- 2011-02-26
テンプレート名はpostmetaテーブルに格納されているため、ループ内のどこかにこれを配置するだけです.
$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;
-
はい、私はこれについて知っていますが、問題は、ページに設定されたテンプレートがある場合にのみ機能することです.私が投稿したコードのすばらしい点は、現在のページが `front-page.php`、`index.php`、 `single.php`、`page.php`またはその他のファイルを使用しているかどうかを教えてくれることです.コードには、カスタムページテンプレートのあるページのテンプレート名のみが表示されます.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 - my misunderstanding of your question.
- 0
- 2011-02-26
- Simon Blackbourn
-
@SimonBlackbournそれは私の要件の助けになります.ありがとう.@SimonBlackbourn It's help for my requirement. Thanks.
- 0
- 2013-10-08
- KarSho
-
- 2013-05-01
これはOPのすべての質問に対応しているわけではありませんが、以下のコードは正規表現やテンプレートファイル自体の解析よりも確かに洗練されています.
ページテンプレートを使用しているページを使用していて、ページテンプレートの名前(つまり、テンプレートPHPファイルの上部にあるコメントで定義した人間が読める名前)を取得する場合は、この小さなナゲットを使用できます:
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]; }
テンプレートを使用しているときに組み込みのWordPress
body_class
関数が作成するばかげた長いお尻のクラス名に本当にうんざりしていたので、テンプレート名を取得したかったのです.幸い、その関数の最後にフィルターフックがあり、独自のクラス名を追加することもできます.これが私のフィルターです.誰かがそれが役に立つと思うことを願っています: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; }
このフィルターは、ページテンプレートに名前を付けたものをすべて受け取り、スペースをダッシュに置き換え、すべてを小文字にして、他のすべての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
preg_match_all
行に問題があります.代わりにこれを試してください:preg_match_all("/Template Name:(.*)\n/siU",$template_contents,$template_name);
また、
if (!is_admin()) { .... }
を使用してフロントエンドでのみ実行できます.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.-
提案をありがとう、彼らは問題を解決しません、しかし彼らはちょっと私に解決策を教えてくれました.WPは、テンプレートリストを生成しているときに、 `functions.php`を調べても、` "/Template Name:(.*)\n/siU" `を見つけて、`functions.php`をテンプレートファイルとして扱うことがわかりました..これはWPのバグだと思います.このファイルを見るべきではありません.解決策:ファイルをサブディレクトリに移動します.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:これはWPのバグではなく、関数のバグです.@chodorowicz: That's not a bug in WP, it's a bug in your function.
- 0
- 2011-02-26
- wyrfel
-
したがって、基本的にWPは、文字列「テンプレート名:」(コメント内であっても)を `functions.php`ファイルに入れることを禁じています.私にとって、個人的にはそれはバグです(小さいですが、とにかく)が、それは議論次第だと思います.関数自体がバギーだとは言えないと思います.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はあなたが何かをすることを禁じていません.ただし、WPは、debug_backtrace()をループして、使用しているテンプレートファイルを見つけることができることも約束していません.WPサポートフォーラムで見つけたからといって、公式にサポートされているコードであるとは限りません.ご覧のとおり、関数はfooter.phpを明示的に排除します.関数.phpを除外する別の条件を追加することもできます.ところで、関数は各ファイル内で「テンプレート名」を検索しません.ループはそれよりずっと前に終了しています.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
-
問題は `debug_backtrace()`ではありませんでした-すべてのコードを削除して、 `preg_match_all("/Template Name ... `、または`//Template Name: `だけを残すことができ、WPはその後`関数を扱います.テンプレートファイルとしてのphp`ですが、コメントに感謝します-これは非常にユニークな問題であり、あなたが言うように、それがバグであると言うのは公平ではありません.t31osソリューションはクリーンで問題全体を解決します.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
一緒に遊ぶ:
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>';
作成者:
現在のページを提供しているテンプレートページをどのように確認しますか?
admin-bar stuff
パスが上部またはその他のファイルに表示されている場合は、このコード行のファイル名template-loader.php
を次のように変更します.ブレークする必要のあるファイル名.管理バーでこれが必要な場合は、適切な優先度を使用(最も早い)このリストの最後にファイルが入力されていないことを確認してください.例:
add_action('admin_bar_menu', 'my_adminbar_template_monitor', -5);
priority
-5
は、最初にロードすることを確認します.重要なのは、この線を適切なタイミングでレンダリングすることです.「現在の」テンプレートファイルは返されませんが、現在のページロードに使用されている現在のすべてが返されます. たぶん、そのアイデアからいくつかのロジックで「切り抜く」.
get_included_files()
の「最後の」キーは、最後に登録されたインクルードファイルであり、おそらくサイドバーウィジェットなどによってフッターで使用される最後のtemplate-file/-partです.おそらく、cos複数インクルードファイルはget_included_files()に再登録/再入力されません.それ以外の場合、この問題をハッキングする意図は明確でなければなりません. インクルードされたファイルは、インクルードされるまで、インクルードされたものとして報告する方法はありません.その後、シナリオを使用するのに遅刻する可能性があります.
あなたが望む「時間」のほとんど:
$template = get_current_loaded_template(); if($template == 'single-product.php') add_filter('the_title' .... if($template == 'format-gallery.php') add_action('post_thumbnail' ....
ただし、テンプレートが
get_template_part
のWordpressコアメソッドの外部に読み込まれる場合は不可能です.代わりにニーズを再設計してください!たぶん、loop_start()
、in_the_loop()
、add_action('the_post')
には、テンプレートに応じてデータを変更するという、必要なソリューションがあります.ループ内の各エントリのロード.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. -
テンプレートで使用されているファイルの現在の名前を表示するためにこれを見つけました:
出典:ページテンプレートの名前を取得するページ
バックエンドのテンプレート選択ボックスで、この醜い余分なエントリを取得することを除いて、それは非常にうまく機能します:
誰かがそれを修正する方法を知っていますか?この関数がバックエンドで呼び出される理由すらわかりません.
is_frontend()
のような条件関数はありますか?おそらくこれで問題は解決しますか?