问题描述

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