問題描述
有人用 get_template_part()(或 locate_template()) 調用了一個模板,有沒有辦法知道你在做什麼模板。
例如,如果從 archive.php 調用 get_template_part('loop','archive');
然後在您的 loop-archive.php 文件中工作。有沒有辦法定義一個具有當前模板部分名稱的變量…. 所以 $template = 'loop-archive'。更好的是,也許在兩個部分,所以’loop’ 和’archive’,但我可以做一些字符串拆分。
Question #10537 似乎有些相關,但似乎沒有涵蓋模板部分。
最佳解決方案
沒有一個返回當前上下文的核心全局變量。但是,您可以使用上下文 template conditional tags 來構建自己的。您可以按照與 WordPress 核心相同的順序,通過遵循 wp-includes/template-loader.php 來瀏覽條件標籤。
簡單地將您的輸出包裝在自定義的主題功能中。 Here’s how I do it(注:我不認為我嚴格遵循 template-loader.php):
function oenology_get_context() {
$context = 'index';
if ( is_home() ) {
// Blog Posts Index
$context = 'home';
if ( is_front_page() ) {
// Front Page
$context = 'front-page';
}
}else if ( is_date() ) {
// Date Archive Index
$context = 'date';
} else if ( is_author() ) {
// Author Archive Index
$context = 'author';
} else if ( is_category() ) {
// Category Archive Index
$context = 'category';
} else if ( is_tag() ) {
// Tag Archive Index
$context = 'tag';
} else if ( is_tax() ) {
// Taxonomy Archive Index
$context = 'taxonomy';
} else if ( is_archive() ) {
// Archive Index
$context = 'archive';
} else if ( is_search() ) {
// Search Results Page
$context = 'search';
} else if ( is_404() ) {
// Error 404 Page
$context = '404';
} else if ( is_attachment() ) {
// Attachment Page
$context = 'attachment';
} else if ( is_single() ) {
// Single Blog Post
$context = 'single';
} else if ( is_page() ) {
// Static Page
$context = 'page';
}
return $context;
}
然後,我通過 oenology_get_context()作為參數,例如:
get_template_part( 'loop', oenology_get_context() );
我認為這些方面的東西將是一個很好的核心候選人,儘管我不確定最好的實施方式。不過,我很樂意提交補丁。
次佳解決方案
因為答案是純 PHP
$path_parts = pathinfo(__FILE__);
//var_dump($path_parts);
echo $path_parts['filename'];
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。