[$template] ページに適用されているテンプレートファイルを知る方法

0
487
views

WordPress はページごとで適用されているテンプレートファイルが違います。このページではどのテンプレートファイルが使われているのか?それを画面に表示してみます。

様々なテンプレートファイル

WordPress には様々なテンプレートファイルが用意されています。index.php、single.php、archive.php、category.php、home.php などなど利用しているテーマによっても揃えられているファイルの数や種類が違ってきます。 WordPress はサイトへの訪問者が送信してきた http リクエスト(URL アドレス)に従って、どのテンプレートを適用すべきかを選定し、その php で生成されたレスポンス(html)を返します。 つまり、リクエストによって使用テンプレートが違ってくるのです。

適用テンプレートの優先順位の学習

問題は「今表示されているページがどのテンプレートを使っているか」が分からなくなってしまうことです。 WordPress の仕様や構造を深く理解している人ならともかく、WordPress の仕組みを学習している段階では、適用テンプレートのアルゴリズムを正確に把握することはたやすくありません。 そのためカスタマイズやテーマ開発に慣れないうちは、「このリクエストにはこのテンプレートが利用される」ということを確実にチェックするためにデバッグすることをおすすめします。 デバッグを行うことで、適用テンプレートの優先順位などの学習に役立ちます。

簡易的な方法

デバッグは、footer.php など表示させたいに以下のコードを挿入します。

<?php 
    global $template;
    $description = '[適用テンプレートファイル名]';
    $template_name = basename($template, '.php');
    echo '', $description, $template_name, '.php', '</p>';
?>

ポイントは、グローバル変数の $template を使う点です。適用テンプレート情報を格納している $template を引数に basename 関数を呼び出して、ファイルパスを取得します。

外部ファイル化する方法

デバッグの目的を達成したいなら、前述の簡易的な方法で事足ります。ここからは、目的に対してやや過剰な作業ですが、このデバッグをのちのちメンテナンスしやすいように部品化してみます。

部品化ファイルの新規作成

テーマフォルダに任意の名前のディレクトリ(例えば inc )を作り、そこに show-applied-filenames.php (この名前も任意)を以下の内容で作ります。 inc/show-applied-filenames.php を新規作成:

<?php 
function show_temp_filenames() {
    global $template;
    $description = '[適用テンプレートファイル] ';
    $template_name = basename($template, '.php');
    echo '', $description, $template_name, '.php', '</p>';
}
?>

部品化ファイルのインクルード

この自作した show_temp_filenames 関数を使えるように、functions.php で inc/show-applied-filenames.php をインクルードします。

require get_template_directory() . '/inc/show-applied-filenames.php';

自作関数の呼び出し

あとは、footer.php などのデバッグを表示したい場所で自作関数を呼び出すだけです。

<?php show_template_filenames(); ?>

デバッグを一般閲覧者に見せない対策

ただ当然ながら、こうしたデバッグはサイトの一般訪問者に見せるべきではありません。

条件文1: デバッグが無効だったら見せない

例えばデバッグを外部ファイル化した場合は、公開時には footer.php での呼び出し部分をコメントアウトするなり、削除するなりすれば済みます。 しかし大抵は削除し忘れます。 それを防止するには、footer.php などでの関数の呼び出し処理(および functions.php でのインクルード部分)を以下のような条件文でくるんでやるのが1つの手です。

<?php 
    if ( defined('WP_DEBUG') && WP_DEBUG ) {
        //ここに処理を書く
    }
?>

定数 WP_DEBUG は、デバッグモードが有効かどうかを記録しています。つまり上記は、WP_DEBUG が true(デバッグモードが有効)なら処理が行われるようにする条件文です。

公開時はデバッグ ON

カスタマイズやテーマ開発を行うときには、ファイル内のバグを見逃さないためにも、デバッグモードは有効にしておくべきです。 wordpress インストールディレクトリ直下の wp-config.php 内でデバッグモードの設定が行えます。以下は開発時の設定例です。

define( 'WP_DEBUG', true );

サイト公開時は true を false に変更して、デバッグモードを無効にします。

define( 'WP_DEBUG', false );

条件文2: 一般ユーザには見せない

他に、処理をくるむ条件文を「ログインユーザかどか」にする方法もあります。

<?php 
    if ( is_user_logged_in() ) {
        //ここに処理を書く
    }
?>

上記の条件文にすることで、ページの閲覧ユーザがログインしていれば、処理が行われることになります。つまり、一般のサイト訪問者にはデバッグ内容が見えないわけです。 デバッグモードとログインユーザかどかを二重の入れ子にして処理の条件文にする手もあります。

<?php 
    if ( defined('WP_DEBUG') && WP_DEBUG ) {
        if ( is_user_logged_in() ) {
            //ここに処理を書く
        }
    }
?>

デバッグ部品化のまとめ

1. 外部ファイルを新規作成

<?php 
function show_template_filenames() {
    global $template;
    $description = '[適用テンプレートファイル] ';
    $template_name = basename($template, '.php');
    echo '', $description, $template_name, '.php', '</p>';
}
?>

2. 部品をインクルード

if ( defined('WP_DEBUG') && WP_DEBUG ) {
    if ( is_user_logged_in() ) {
        require get_template_directory() . '/inc/show-applied-filenames.php';
    }
}

3. 関数の呼び出し

デバッグ表示したい場所で自作関数を呼び出します。

<?php
    if ( defined('WP_DEBUG') && WP_DEBUG ) {
     if ( is_user_logged_in() ) {
       show_template_filenames();
     }
    } 
?>

4. デバッグ表示をチェック

きちんと適用テンプレートのファイル名が表示されているかチェックして完了です。