問題描述

有人用 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。