WordPress: 現在のテンプレートファイル名を取得する

WordPressはブラウザからの送られてくるURLを解析して、使用するテンプレートファイルを選択します。
選択は規則に従って行われるのですが、ネットなどで調べるのも面倒です。
そこで、現在使用しているテンプレートファイルを表示することで把握する方法を紹介します。

テンプレートファイル名を保持している変数

WordPressのソースコードを追ってみましたが、テンプレートファイル名を取得する関数は用意されていないようです。

そこでテンプレートファイル名を呼び出すコードに着目してみます。
/wp-includes/template-loader.php の最後の方にある、次のコードです。

  • if ( $template ) {
  • include $template;
  • }
AFFS Simple Code Viewer
Copy

変数$templateにテンプレートファイルのフルパスが入っていて、includeでそのファイルを読み込んでいます。
読み込まれたファイル内では、globalキーワードを使用して変数$templateを参照できます。

テンプレートファイルは、おそらくheader.phpを読み込んでいると思います。

その前提で、header.phpにテンプレートファイル名を表示するコードを組みこんでみます。

  • <?php
  • global $template;
  • $template_file = str_replace( get_theme_root() , '' , $template);
  • echo '<p>現在のテンプレート:' .$template_file .'</p>';
  • ?>
AFFS Simple Code Viewer
Copy

フルパスは少し長いので、テーマディレクトリ以降のみ表示しています。

このコードを bodyタグの直後などに記述します。

共通のヘッダーを使用していれば、投稿ページだけでなくカテゴリページや作成者ページなどでもテンプレートファイル名が表示されるはずです。

親テーマか子テーマかの判定

子テーマを採用しているテーマは、親と子で同名のテンプレートがあると子テーマのテンプレートが使用されます。
前項で紹介したコードはテンプレートのディレクトリ名が表示されるのでそれで判断可能ですが、プログラムコードで判定してみます。

  • <?php
  • global $template;
  • $template_file = str_replace( get_theme_root() , '' , $template);
  • $normal_theme = STYLESHEETPATH === TEMPLATEPATH;
  • $type = 'その他';
  • if( strpos($template,STYLESHEETPATH) === 0 ){
  • $type = $normal_theme ? '通常テーマ' : '子テーマ';
  • }else if( !$normal_theme && strpos($template,TEMPLATEPATH) === 0 ){
  • $type = '親テーマ';
  • }
  • echo '<p>現在のテンプレート:['.$type.']' .$template_file .'</p>';
  • ?>
AFFS Simple Code Viewer
Copy

定数STYLESHEETPATH は子テーマのフルパスが、定数TEMPLATEPATH は親テーマのフルパスがセットされています。
二つの定数が同じ値なら、子テーマを使用していないことを意味します。

子テーマの仕組みについて、少し調べてみたので参考にしてみてください。

WordPress: 子テーマの仕組みについて調べてみた