WordPressでブログではなくいわゆる普通のサイトを作ってる際に
階層が浅いサイトならグローバルナビゲーションだけで事足りるのだけれども
たとえば、階層が深くなった際にサブメニューをサイドバーに表示させたい、
という場面に出くわした場合、どうすりゃいいんだと頭を捻る。
例:バンドメンバー一覧→各メンバー詳細(サイドバーにはメンバー名表示)
最初に思いついたのは
- バンドメンバー一覧に連なるページ群は別のテンプレートを作成する。
これが一番簡単なのだけれども、
Wordpressの機能であるカスタムメニュー、そしてウィジェットを使いたい場合
sidebar.phpもその数だけ作らなきゃなんねえのか?とか
色んな事が頭に浮かんできて頭パーーーーーン!(懐)となりそうになった。
いやいや、そんな難しく考えんでも、とコーヒー飲んで落ち着いて整理する。
- WordPressの固定ページは親子関係を設定できる。
- 各ページにはスラッグが設定でき、それを呼び出すことが可能。
- という事は、sidebar.phpに条件分岐のスクリプトを書いて、ウィジェットをそこだけ呼び出せばいいんじゃね?
という結論に至りました。
まずはfunctions.phpにregister sidebar widget関数を書いてサイドバーを登録。
以下は複数のサイドバーを登録する際の例。
if (function_exists('register_sidebar')) { register_sidebar(array( 'name' => 'sample1', 'before_widget' => '<div class="widget">', 'after_widget' => '</div>', 'before_title' => '<div class="title">', 'after_title' => '</div>' )); register_sidebar(array( 'name' => 'sample2', 'before_widget' => '<div class="widget">', 'after_widget' => '</div>', 'before_title' => '<div class="title">', 'after_title' => '</div>' )); register_sidebar(array( 'name' => 'sample3', 'before_widget' => '<div class="widget">', 'after_widget' => '</div>', 'before_title' => '<div class="title">', 'after_title' => '</div>' )); }
ここで設定できる項目は
- name・・・・・・・・ウィジェット設定画面で表示されるラベル
- id・・・・・・・・サイドバーに割り振られるid
- description・・・・・・・・サイドバーの説明(WP2.9以降)
- before_widget・・・・・・・・ウィジェットの前のテキスト
- after_widget・・・・・・・・ウィジェットの後のテキスト
- before_title・・・・・・・・タイトルの前のテキスト
- after_title・・・・・・・・タイトルの後のテキスト
テキストというのはもちろんHTMLも使用可能です。
h2で見出しをつけたりとか、ウィジェットをdivで囲んだりとか。
サイズ違いのサイドバーなんかを使う場合は便利ですね。
もちろん必要ないものは省略も可能です。最低、nameだけでも構いません。
そしてsidebar.phpに条件分岐を書けばOK。
以下は固定ページに設定されたスラッグ毎に表示させるサイドバーを変える例文。
<?php if(is_page('about-me')): ?> <?php dynamic_sidebar( 'sample1' ); ?> <?php else(is_page('members')): ?> <?php dynamic_sidebar( 'sample2' ); ?> <?php elseif(is_page('access')): ?> <?php dynamic_sidebar( 'sample3' ); ?> <?php endif; ?>
ちなみに子ページのスラッグはデフォルトでは単独取得出来ないので
それが必要な場合にはfunctions.phpに以下を書いてあげる必要があります。
function is_subpage() { global $post; if ( is_page() && $post->post_parent ){ $parentID = $post->post_parent; return $parentID; } else { return false; }; };
・・・・・つーか、これプラグインあるんじゃねえの?って思って検索したら
ウィジェットを表示させる条件を直感的に操作できるDisplay widgetsプラグイン
http://foom.in/2012/05/plugin-display-widgets/
あるやん・・・・・しかもめっちゃ便利そうなのが・・・・
ま、まあ、お仕事には「プラグイン使わないで」って事もあるから・・・・
うん、あるから・・・・・・