こんにちは。
皆さん張り切ってwordpressカスタムしてますか?
今日は使用している固定ページのテンプレートによる条件分岐についてです。
条件分岐タグを使った条件分岐
これはcodexにもある通りですね。
is_page_template()
<?php if(is_page_template()):?> ページテンプレートが使われている場合の処理 <?php endif; ?>
特定のページテンプレートであれば、
例:page-templatesフォルダにあるabout.phpを使用
<?php if(is_page_template('page-templates/about.php')):?> about.phpというページテンプレートが使われている場合の処理 <?php endif; ?>
注意点として、is_page_template()は、ループの外で使う必要があります。
今回はループ内で分岐させたかったので、別の方法を探します。
条件分岐タグについてはこちらを参照ください。
ループ内で条件分岐したい
もっと自由に、条件分岐したい場合は、
get_page_template_slug()を使ってみましょう。
get_page_template_slug()は適用されているページテンプレートのスラッグ(ファイル名)を返してくれます。
細かい条件分岐をしたいときに便利ですね。
具体例です。
通常のpage.phpと
page-templates/onecolumn-col10.php
page-templates/onecolumn-col8.php
という3種類のページテンプレートがあります。
テンプレートごとにクラスを分けたいのです。
<?php $page_slug = get_page_template_slug(); //テンプレートのスラッグを取得 //テンプレートによる切り替え //10カラムテンプレートの場合 if( $page_slug == 'page-templates/onecolumn-col10.php' ): ?> <div class="col-md-10 offset-md-1"> <?php //8カラムテンプレートの場合 elseif( $page_slug == 'page-templates/onecolumn-col8.php' ):?> <div class="col-md-8 offset-md-2"> <?php //それ以外 else:?> <div class="col"> <?php endif; ?>
また、get_page_template_slug()は通常のpage.phpだと、空の文字列を返します。
今回、page.php以外の時としたい箇所がありました。
page.php以外の固定ページテンプレートでclassを追加する例です。
<?php $page_slug = get_page_template_slug(); //テンプレートのスラッグを取得 ?> <div class="もともとのクラス <?php if(!empty($page_slug)) {echo '追加したいクラス'; } ?>">
codexに
get_page_template_slug( $post_id ) /en 関数は現在割り当てられているページテンプレートのスラッグを返します (ページテンプレートが割り当てられていない場合は空の文字列を、$post_id に該当する 固定ページ が無い場合には false)。ループ内、外に関わらず簡単に割り当てられているページテンプレートを調べることができます。
とあるのに、page.phpが空で返ってくるのに気づくのに時間かかっちゃいました・・
固定ページテンプレート(ページテンプレート)によって条件分岐まとめ
ループ外の場合:is_page_template()を使う。
ループ内の場合:
get_page_template_slug()でスラッグを取得して分岐させる。
いかがでしょう。今使わなくてもいつか使うかもしれないので、頭の片隅においておきましょう。