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」みたいな)
何かのご参考となりましたら嬉しいです。
このページを共有する