WordPressでサイト構築をした際サイドバー(sidebar)を各ページ毎に変えたい事はよくあります。
TOPページ(index.php)と固定ページ(page.php)とブログページ(single.php)と3パターンだけなら、phpファイルに別々のサイドバーを呼びこむだけで済みますが、
例えば固定ページAには、Aのサイドバーを。固定ページBには、Bのサイドバーをとか、ブログサイトでは少ないですが、コーポレートサイトではこういう動きがほしい時が多々あります。今回はそのパターンの備忘録。
個別のサイドバーを作成する方法
まず、通常のサイドバーを呼び出すWordpressコードは以下
<?php get_sidebar(); ?>
これで、Theme内の「sidebar.php」というファイル名を呼び出す事ができます。
複数サイドバーを使用する場合は以下のようにSidebarのPHPファイルを用意します。
sidebar-part01.php
sidebar-part02.php
sidebar-part03.php
「-(ハイフン)」から後ろのファイル名は任意です。
そしてそれぞれのSidebarのファイルを呼び出すコードは以下
1 | <?php get_sidebar(part01); ?> |
2 | <?php get_sidebar(part02); ?> |
3 | <?php get_sidebar(part02); ?> |
別々のSidebarを呼び出すコードが理解できれば、後はPHPの条件分岐で振り分けるだけです。
テンプレートを個別に作成して、上記のコードを書いてもいいのですが、数が多けりゃ管理が大変ですし、Sidebarの切り替えだけで、Theme内にテンプレートファイル用のPHPが増えるのも何なんで、ココでは条件分岐を使って振り分けます。
2パターンのサイドバーの場合の条件分岐
固定ページ一つだけを別のSidebarを表示する場合
固定ページは「page.php」で表示されているのは周知の事実ですので、ここのSidebarを表示させたい所に以下のコードを記述します。
3 | get_sidebar( 'ハイフンの後ろA' ); |
スラッグ名は固定ページの編集画面で確認と記述ができます。
もし記述したスラッグ名が「A」なら、「A」のSidebarを表示して、ソレ以外なら通常のSidebarを表示しろと命令してます。
複数の固定ページを別のSidebarを表示する場合
これでは、一つの固定ページしか変えることができません、もし複数の固定ページを別のSidebarにしたい場合の記述方法は以下
3 | if (is_page( array ( 'スラッグ名' , 'スラッグ名' , 'スラッグ名' ))): |
4 | get_sidebar( 'ハイフンの後ろA' ); |
複数の固定ページのスラッグ名をarrayの中に「’ ’」で囲って、「,」で区切ります。
3パターン以上のサイドバーの条件分岐
上記のやり方では、一つのSidebarしか指定できません。複数のSidebarを表示させたい事もあるでしょう。コーポレートサイトでは固定ページのカテゴリごとにSidebarの表示を切り替えるのはよくあることかと思います。そういう場合は「elseif」を使います。
2 | if (is_page( array ( 'スラッグ名' , 'スラッグ名' , 'スラッグ名' ))): |
3 | get_sidebar( 'ハイフンの後ろ' ); |
4 | elseif (is_page( array ( 'スラッグ名' , 'スラッグ名' , 'スラッグ名' ))): |
5 | get_sidebar( 'ハイフンの後ろ' ); |
6 | elseif (is_page( array ( 'スラッグ名' , 'スラッグ名' , 'スラッグ名' ))): |
7 | get_sidebar( 'ハイフンの後ろ' ); |
その他のページの条件分岐の書き方
今回は固定ページの表示方法の切り替えでしたが、この際他のページの条件分岐の記述方法もまとめて、覚えておいたのでφ(*’д’* )メモメモ
カテゴリごとにSidebarを切り替える(single.php)
例えば、ブログページのカテゴリ毎に別々のSidebarを表示させたい場合はいかの記述
2 | if (in_category( 'スラッグ名' )) : |
3 | get_sidebar( 'ハイフンの後ろ' ); |
4 | elseif (in_category( 'スラッグ名' )) : |
5 | get_sidebar( 'ハイフンの後ろ' ); |
カテゴリアーカイブページ( category.php)の場合
single.phpで「in_category」を使うのに対し、category.phpでは「is_category」を使うようです。
2 | if (is_category( 'スラッグ名' )) : |
3 | get_sidebar( 'ハイフンの後ろ' ); |
4 | elseif (is_category( 'スラッグ名' )) : |
5 | get_sidebar( 'ハイフンの後ろ' ); |
今回参考にさせていただいたサイト様m(_ _)m
WordPressでページやカテゴリごとにサイドバーを切り替えるには|西沢直木のWebサイト
まとめ
条件分岐はPHPの基本的な記述方法ですが、いかんせんPHPの知識が浅いため、設定時は若干つまずきましたが、意味が理解できればそれほど難しいことでもないので、きちんと理解してサイト構造を組んでいければと思います。今回は以上ですm(_ _)m
こんなプラグインもあるので、ブログサイトとかでSidebarをウィジェトで管理しているならこっちの方がアリかもしれませんね(・∀・)
Content Aware Sidebars – サイドバーのウィジェットをページ毎に管理できるWordPressプラグイン|NETAONE