どちらでも使える!!WordPressで固定ページを条件分岐する方法
logwはWordPressで作成しています。WordPressでカテゴリや固定ページによってナビや表示内容を変えたいと思った事は誰でも一度はあるかもしれません。今回は固定ページを例にとってやってみたいと思います。
前提条件:固定ページにメニューを直接書き込んでいる
普通はheader.phpにヘッダーメニューを書いているからあり得ないと思うかもしれませんが、作り方やデザインによってはあり得るので書いて行きたいと思います。
1つのファイルに条件分岐で直接記述
このやり方は多くのサイトで導入されているかもしれません。固定ページなのでWordPressのテンプレートでいうとpage.phpです。このpage.phpに直接条件式と内容をかいていくことになります。簡単なソースを書いてみます。
<?php if(is_page(array('スラッグ1', 'スラッグ2', 'スラッグ3', 'スラッグ4'))): ?> <ul> <li><a href="#">ナビ1</a></li> <li><a href="#">ナビ2</a></li> <li><a href="#">ナビ3</a></li> <li><a href="#">ナビ4</a></li> </ul> <?php else : ?> <u> <li><a href="#">メニュー1</a></li> <li><a href="#">メニュー3</a></li> <li><a href="#">メニュー5</a></li> <li><a href="#">メニュー7</a></li> </ul> <?php endif; ?>
こんな感じになります。
※実際にはこんだけではなく、コンテンツ部分やフッター部分の記述も入ります。
このやり方は、スラッグ1、スラッグ2、スラッグ3、スラッグ4の時はナビ1~ナビ4を表示して、それ以外の時はメニュー1~7を表示するというのになります。スラッグを増やせばその分ナビ1のメニューを表示することになります。
メリット
このやり方のメリットとしては、一つのファイルで条件式を書いて行くのでファイルが一つですむというメリットがあります。例えばメニュー2、メニュー4、メニュー6というメニューができたとしたら、条件部分とスラッグを追加すれば良いです。
デメリット
このやり方のデメリットとしては、条件式が増えてくるとどこをいじれば良いかわかんなくなります。特にPHPがわからない僕からすると最初見ただけでこれってどうやっているんだろうとか、なにをしているんだろうとわからなくなります。なので僕はこっちのやり方はしていません。
条件毎にファイルを作成する
普段僕が行うのはこっちの方法になります。このやり方は
navi.php <ul> <li><a href="#">ナビ1</a></li> <li><a href="#">ナビ2</a></li> <li><a href="#">ナビ3</a></li> <li><a href="#">ナビ4</a></li> </ul>
menu.php <u> <li><a href="#">メニュー1</a></li> <li><a href="#">メニュー3</a></li> <li><a href="#">メニュー5</a></li> <li><a href="#">メニュー7</a></li> </ul>
二つのファイル(navi.phpとmenu.php)を作成します。条件式は使いますが、上との違いは上はpage.phpに条件式など全て書き込んでいました。このやり方は条件式を使ってファイルをインクルードするようにします。
page.phpに条件式を書き込む
page.php <?php if ( is_page(array('スラッグ1', 'スラッグ2', 'スラッグ3', 'スラッグ4')) ) { //テンプレートを切り替え include(TEMPLATEPATH . '/navi.php'); }else{ include(TEMPLATEPATH . '/menu.php'); } ?>
このように記述します。page.phpには条件式だけを下記、メニューやコンテンツの記述は各ファイル(navi.php、menu.php)に書き込みます。
メリット
このやり方のメリットは、僕のようなPHPのわからない人でも修正が比較的容易な点です。例えばnavi.phpのメニューを変えたいとなったときにpage.phpではなくnavi.phpを開いて修正すればいいです。
デメリット
ファイル数が多くなる可能性があります。ファイル数が多いと管理などが大変になります。
個人支援・寄付について
サイトラボでは個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではビットコインで受け付けております。
- ビットコイン:3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS