현재 템플릿 파일의 이름을 가져옵니다
-
-
@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 stackexchange 모두에 대한 크레딧을 제공하지 않고 모든 것을했습니다 ...^ 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
-
루프 내에서 어떻게 할 수 있습니까?각 템플릿 파일의 한 페이지에 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
함수를 사용하여 파일 이름으로 자르는 것이 좋습니다.예제 코드 :
두 개의 함수,하나는 전역을 설정하고 하나는이를 호출합니다.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-Plugin으로도 실행할 수 있습니다.
그런 다음 언제든지
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`와 헷갈리는 것 같습니다.또한 정적 var가 채워지는 대신 필터 내부에 있는지 확인합니다.일부 코드가 후크를 추가로 실행하기로 결정하면 문제가 발생할 수 있습니다.`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` 파일에 "Template Name :"문자열을 넣는 것을 금지합니다.저에게는 개인적으로 그것은 버그입니다. (작지만 어쨌든) 그것은 토론의 여지가 있습니다.기능 자체가 버그라고 말할 수 없다고 생각합니다.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를 명시 적으로 설명합니다.functions.php를 제외하는 다른 조건을 추가 할 수도 있습니다.BTW : 함수는 각 파일 내에서 '템플릿 이름'을 찾지 않으며 루프는 그보다 오래 전에 끝났습니다.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가`functions.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()
"마지막"키는 마지막으로 등록 된 포함 파일이며,아마도 사이드 바 위젯 등에서 바닥 글에 사용 된 마지막 템플릿 파일/부분입니다. 합리적으로 여러 개의 포함 된 파일은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()
와 같은 조건부 함수가 있습니까? 이것이 문제를 해결할 수 있을까요?