サポート » 使い方全般 » 現在使用されているテンプレートファイルの判別

  • 解決済 gogoweb

    (@gogoweb)


    wordpress3.1をインストールしてみて、管理バーに現在表示しているページの編集と、ページで使用しているテンプレートの編集のリンクを追加したいと思います。

    そこで現在実際に読み込まれているテンプレートファイル名を取得したいのですが、何かいい関数等ありませんでしょうか?

    試しに_wp_page_templateの値を取得してみましたが、ページテンプレートでテンプレートが設定されていた場合のみしか取得できませんでした。
    希望としては
    投稿ページを見ている場合はsingle.php、カスタム投稿で専用テンプレートがある場合single-{posttype}.php、ない場合はsingle.php等実際に表示された段階での使用しているテンプレートを取得したいです。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • WPで関数が用意されていそうですけど、PHPの定数で取得できますよ。
    <?php basename(__FILE__); ?>

    ただ、header.php 内で実行すると header.php、loop-single.php 内で実行すると loop-single.php が返り値となります。

    トピック投稿者 gogoweb

    (@gogoweb)

    一応自己解決しました。
    functions.phpかプラグインで作る予定だったので現在実行中のファイル名の取得だと不都合がありました。
    とりあえずテンプレート階層で利用している関数を参考に現在利用しているテンプレートファイル名を返す関数を作りました。

    function get_use_templatefile(){
    	if ( defined('WP_USE_THEMES') && WP_USE_THEMES ) :
    		$template = false;
    		if     ( is_404()            && $template = get_404_template()            ) :
    		elseif ( is_search()         && $template = get_search_template()         ) :
    		elseif ( is_tax()            && $template = get_taxonomy_template()       ) :
    		elseif ( is_front_page()     && $template = get_front_page_template()     ) :
    		elseif ( is_home()           && $template = get_home_template()           ) :
    		elseif ( is_attachment()     && $template = get_attachment_template()     ) :
    			remove_filter('the_content', 'prepend_attachment');
    		elseif ( is_single()         && $template = get_single_template()         ) :
    		elseif ( is_page()           && $template = get_page_template()           ) :
    		elseif ( is_category()       && $template = get_category_template()       ) :
    		elseif ( is_tag()            && $template = get_tag_template()            ) :
    		elseif ( is_author()         && $template = get_author_template()         ) :
    		elseif ( is_date()           && $template = get_date_template()           ) :
    		elseif ( is_archive()        && $template = get_archive_template()        ) :
    		elseif ( is_comments_popup() && $template = get_comments_popup_template() ) :
    		elseif ( is_paged()          && $template = get_paged_template()          ) :
    		else :
    			$template = get_index_template();
    		endif;
    		$template = preg_replace("|" . TEMPLATEPATH . "/|",'',$template);
    		return $template;
    	endif;
    	return false;
    }

    さすがに全部は確認してませんが、多分現在利用しているページのテンプレート名が帰ってくると思います。
    不具合などあったらよかったら教えてください。

    ファイル名の取得だと不都合がありました。

    ちょっと調べたら、グローバル変数 $template にセットされてますね。

    print_r($template);

    トピック投稿者 gogoweb

    (@gogoweb)

    あら、WordPressのグローバル変数を探しても見つからなかったけどあったのですか。
    無駄に手間をかけてしまったけど、こっちなら希望通りのあたりが取得できそうです。

    返ってくる値は単一の値でしたが、print_rで出力しているところをみると複数になることもあるのでしょうか?

    print_rで出力しているところをみると

    print_rに特別意味はないです。返り値を調べる時のものをそのままコピペしました…

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「現在使用されているテンプレートファイルの判別」には新たに返信することはできません。