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