テンプレートによって違うサイドバーを表示させる事を想定しています。
例えるとカテゴリーページはsidebar.php、固定ページはsidebar1.php、アーカイブページはsidebar2.phoみたいなイメージです。sidebar.phpは管理画面の「外観」→「ウィジット」から設定できますが複数sidebar.phpを作成する場合、どのような手順で作成するのでしょうか。その作業方法を教えてください。
・サイドバー(※ウィジェットエリア)を作成します。
Twenty Elevenの「functions.php」の384行目以降に次の記述がありますので、関数「twentyeleven_widgets_init()」内に続けて記述してみてください。(※オリジナルテーマの場合は、参考にして作成してください。)
/** * Register our sidebars and widgetized areas. Also register the default Epherma widget. * * @since Twenty Eleven 1.0 */ function twentyeleven_widgets_init() { register_widget( 'Twenty_Eleven_Ephemera_Widget' ); register_sidebar( array( 'name' => __( 'Main Sidebar', 'twentyeleven' ), 'id' => 'sidebar-1', 'before_widget' => '<aside id="%1$s" class="widget %2$s">', 'after_widget' => "</aside>", 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>', ) ); /* ~ 略 ~ */ register_sidebar( array( 'name' => __( 'Footer Area Three', 'twentyeleven' ), 'id' => 'sidebar-5', 'description' => __( 'An optional widget area for your site footer', 'twentyeleven' ), 'before_widget' => '<aside id="%1$s" class="widget %2$s">', 'after_widget' => "</aside>", 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>', ) ); // カテゴリーページ用サイドバーの追加 register_sidebar( array( 'name' => 'Category Main Sidebar', // 適当な名前 'id' => 'sidebar-6', // 固有のID 'description' => 'An optional widget area for your category pages sidebar', 'before_widget' => '<aside id="%1$s" class="widget %2$s">', 'after_widget' => "</aside>", 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>', ) ); // 固定ページ用サイドバーの追加 register_sidebar( array( 'name' => 'Pages Main Sidebar', // 適当な名前 'id' => 'sidebar-7', // 固有のID 'description' => 'An optional widget area for your pages sidebar', 'before_widget' => '<aside id="%1$s" class="widget %2$s">', 'after_widget' => "</aside>", 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>', ) ); // アーカイブ用サイドバーの追加 register_sidebar( array( 'name' => 'Archives Main Sidebar', // 適当な名前 'id' => 'sidebar-8', // 固有のID 'description' => 'An optional widget area for your archives sidebar', 'before_widget' => '<aside id="%1$s" class="widget %2$s">', 'after_widget' => "</aside>", 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>', ) ); } add_action( 'widgets_init', 'twentyeleven_widgets_init' );
・関数リファレンス/register sidebar
http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/register_sidebar
・各種ページ用のテンプレートを編集して、任意のサイドバーを表示するようにします。
カテゴリーページ「category.php」のサイドバーを読み込む位置に次の記述を追加します。(※「sidebar.php」という事ですから、引数を指定する必要はありません。)
get_sidebar();
・「sidebar.php」に次の記述を追加して、登録済みのサイドバーを表示するようにします。
<!-- サイドバーを囲む要素のIDは任意で指定してください。この例ではTwenty Elevenから引用しています。 --> <div id="secondary" class="widget-area"> <?php if ( ! dynamic_sidebar( 'sidebar-6' ) ) : ?> <!-- ここに記述する内容は、サイドバーが利用されていない場合に表示されます。 --> <?php endif; // end sidebar widget area ?> </div><!-- #secondary .widget-area -->
※「dynamic_sidebar()」には、表示するサイドバー(※「register_sidebar()」で登録済み)の名前または固有のIDを指定します。(ここでは、カテゴリーページ用のサイドバーのIDの「sidebar-6」としてあります。)
次に固定ページ「page.php」のサイドバーを読み込む位置に次の記述を追加します。(※「sidebar1.php」という事ですが、WordPressの仕様で「sidebar-引数に指定した名前.php」となっていますから、ファイル名は「sidebar-1.php」になります。引数には「1」を指定します。)
get_sidebar( '1' );
※上記と同じようにアーカイブページ「archive.php」にも追加します。
※各種ページで読み込むテンプレートファイルは、次のページも参照しておくといいです。
http://wpdocs.sourceforge.jp/テンプレート階層
※サイドバーのテンプレートファイル「sidebar-1.php」「sidebar-2.php」についても、「sidebar.php」と同じように作成します。
※次のように「is_active_sidebar('サイドバーの名前または固有のID')」を使用すると、指定したサイドバーが利用されているかどうか判定して、利用している時のみ表示する事ができますので、利用されていない時に任意のサイドバーを囲む要素ごと非表示にできます。(※Twenty Elevenの「sidebar-footer.php」参照)
<?php if ( is_active_sidebar( 'sidebar-3' ) ) : ?> <div id="first" class="widget-area" role="complementary"> <?php dynamic_sidebar( 'sidebar-3' ); ?> </div><!-- #first .widget-area --> <?php endif; ?>
・関数リファレンス/get_sidebar
http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_sidebar
説明
現在のテーマディレクトリの sidebar.php テンプレートファイルを読み込みます。名前 ($name) を指定すると、指定したサイドバー sidebar-{name}.php を読み込みます。
sidebar.php ファイルがテーマに含まれていない場合は、デフォルトテーマの wp-includes/theme-compat/sidebar.php を読み込みます。
使い方<?php get_sidebar( $name ); ?>パラメータ
$name
(文字列) (オプション) sidebar-name.php を読み込む
初期値: なし
・関数リファレンス/dynamic sidebar
http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/dynamic_sidebar
いつも詳細な解説ありがとうございます。確認してみます。
2013/03/08 11:42:03確認しました。実現しました。本当にありがとうございます。
2013/03/09 20:51:55