サイドバーのコントロール
「固定ページすべてのサイドバーに、検索フォーム(だけ)を表示させたい」という簡単な事を実現するのに、けっこう手間取ってしまった。ウィジェットエリアの登録やテンプレート上での記述などが、まだすっきり把握できていない。
実現したいことは「サイドバーで、複数のウィジェットを使い分けて表示」することなのだが、これぐらいの作業は迷わず10分ぐらいでできないとヤバイと思われるので、手順をメモしておく。
目次
functions.php でサブメニューをウィジェットエリアに登録
// widget area - ウィジェットエリア register_sidebar(array( 'id' => 'submenu', 'name' => 'サブメニュー', 'description' => 'サブメニューに表示するウィジェットを指定。', 'before_widget' => '<aside id="%1$s" class="mymenu widget %2$s">', 'after_widget' => '</aside>', 'before_title' => '<h2 class="widgettitle">', 'after_title' => '</h2>' )); register_sidebar(array( 'id' => 'searchform_submenu', 'name' => '検索フォームサブメニュー', 'description' => 'フロントページと固定ページのサブメニューに表示するウィジェットを指定。', 'before_widget' => '<aside id="%1$s" class="mymenu widget %2$s">', 'after_widget' => '</aside>', 'before_title' => '<h2 class="widgettitle">', 'after_title' => '</h2>' ));
今回は、ほとんどのページでは「検索/最近の投稿/タグクラウド/月別アーカイブ」を「サブメニュー」(id=”submenu”)で、intro/web/job/musicの各固定ページでは(各pickUp記事のメニューとは別に)「検索」だけを「検索フォームサブメニュー」(id=”searchform_submenu)で表示する。
functions.php でウィジェットエリアに登録したサブメニュー内容は、ダッシュボード > 外観 > ウィジェットで、 ドラッグ&ドロップで編集すると、自動保存されて、すぐにサイトに反映される。
dynamic_sidebar()
適用するテンプレートで dynamic_sidebar()で呼び出す。
<?php dynamic_sidebar('searchform_submenu'); ?>
「WordPress Web開発 逆引きレシピ」(p234)によるとその際に、resister_sidebar関数で登録ができていることを、is_active_sidebar関数で確認する方が良いとのこと。
<?php if (is_active_sidebar('searchform_submenu')) { dynamic_sidebar('searchform_submenu'); } ?>
しかし、dynamic_sidebar(); だけでも、どちらでも問題なく表示された。