wordpress 固定ページのテンプレート(ページテンプレート)によって条件分岐

こんにちは。

皆さん張り切って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()でスラッグを取得して分岐させる。

いかがでしょう。今使わなくてもいつか使うかもしれないので、頭の片隅においておきましょう。

この記事を書いた人

木村 太一

ドットワンの代表です。1979年生まれ。3女の父。ゴルフと筋トレが趣味。立川にあるキヤノン代理店に就職後、1万件以上飛び込み営業したのち独立。たくさんの企業を見てきた経験と自分自身も零細企業の経営者ということを活かし、相手の立場に立ったDX推進、ITコンサルを行っております。

お気軽にお問い合わせください

ホームページ、ネットショップの集客方法から、IT機器や、顧客管理、採用に関することまでご相談ください。
WEBマーケティングのノウハウを生かして、お客様のお悩みを解決します。