WordPressで現在表示しているページが読み込んでいるテンプレートファイル名を取得する方法

WordPressで個別投稿ページ・固定ページ・カテゴリーページなど様々なページを表示する場合は、テーマフォルダの中にある特定のテンプレートファイルを読み込んで表示していますね。

下の表は、表示するページに対して読み込まれるテンプレートファイル名の「一例」です。

表示するページ読み込まれるテンプレートファイル名
個別投稿ページsingle.php
固定ページpage.php
カテゴリーページcategory.php

「一例」という表現にしているのは、「表示するページによって読み込むテンプレートファイルを変える」ことができるからです。

「表示するページによって読み込むテンプレートファイルを変える」とは

ある製品情報ページがあったとして、スラッグが「product」だとします。この場合は「page-product.php」ファイルがテーマフォルダ内にあれば、「page.php」よりも優先的に読み込まれる、という具合です。

このような仕組みはある程度ルール化されていますので、詳しく知りたい場合は「テンプレート階層 – WordPress Codex 日本語版」を読むと、とても勉強になります。

・・・以上が長い前提でしたが、要は「表示するページによって読み込まれるテンプレートファイルがあるよ」ってことがなんとなく理解できればいいのかな、と思います。

というわけで、以下が本題です。

テンプレートファイル名を取得したい時ってどうする

「現在表示しているページが読み込んでいるテンプレートファイル名を取得したい」と思うことがありました。

その場合は、まずglobal変数「$template」の中に読み込んでいるテンプレートファイルのルートからのパスを取得します。

例えば、固定ページを表示する際に読み込まれる「page.php」ファイル内に以下のようなコードを書きます。(ルートからパスが表示されるので、一般的に閲覧する方には見えないように、ログインしているユーザーのみ表示しています)

読み込んでいるテンプレートファイルのルートからのパスを取得する

<?php
if ( is_user_logged_in() ) {
 echo $template;
}
?>

出力結果

/home/xxx/public_html/wp-content/themes/twentyfifteen/page.php

上の出力結果を見ると、ルートから「twentyfifteen」テーマフォルダ内の「page.php」ファイルまでのパスが取得できていますね。

続いて「basename」を使ってテンプレートファイル名だけ取得します。

テンプレートファイル名だけ取得

<?php
if ( is_user_logged_in() ) {
 echo basename($template);
}
?>

出力結果

page.php

これがやりたかった!

拡張子抜きでファイル名のみ取得したい場合

get_template_part」を使ってファイルを読み込む場合などは「.php」の拡張子は要らないと思うので、以下のようにします。

拡張子なしでファイル名のみ取得

<?php
if ( is_user_logged_in() ) {
 echo pathinfo($template)['filename'];
}
?>

出力結果

page

こんなの、何に使うの?

私の場合は、タブレットやスマートフォンなどモバイル表示用に読み込むファイル群をテーマフォルダ内の「mobile」の配下に入れて、ユーザーエージェントで振り分けをします。

タブレットやスマートフォンなどモバイルからのアクセスの場合は、現在読み込んでいるテンプレートファイル名と同名のファイルを「mobile」フォルダ内から読み込む、という時に使いました。(固定ページなら、「テーマフォルダ/mobile/page.php」みたいな)

何かのご参考となりましたら嬉しいです。

著者:bouya Imamura