问题描述
有人用 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。