1. TOP
  2. web
  3. wordPress
  4. サイドバーのコントロール

サイドバーのコントロール

「固定ページすべてのサイドバーに、検索フォーム(だけ)を表示させたい」という簡単な事を実現するのに、けっこう手間取ってしまった。ウィジェットエリアの登録やテンプレート上での記述などが、まだすっきり把握できていない。

実現したいことは「サイドバーで、複数のウィジェットを使い分けて表示」することなのだが、これぐらいの作業は迷わず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(); だけでも、どちらでも問題なく表示された。