サイトアイコン ドットワン合同会社

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

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

モバイルバージョンを終了