WordPressの子テーマへサイドバーなどのウィジェットエリアを付け足さなければならない際に、対応する方法です。
sidebar.phpに全固定ページと全カテゴリーの表示要素を書いてそれぞれ分岐させるとか恐ろしい事をしなくても、functions.phpにregister_sidebars関数を少し書き込めば管理画面のウィジェットページでデフォルトのサイドバーと同じく制御できるようになります。
以下、サイドバー追加手順の例です。
- 1. functions.phpにウィジェットエリアを記述する。複数でも可。
-
register_sidebar( array( 'name' => __( 'ウィジェット画面での表示名1', 'My_theme' ), 'id' => '任意のID1', 'description' => __( '表示名の下の説明文', 'My_theme' ), 'before_widget' => '<div class="sidebar %2$s" id="%1$s">', //ウィジェットエリアの先頭に表示するもの 'after_widget' => '</div>', //ウィジェットエリアの終わりに表示するもの 'before_title' => '<h3>', //タイトル前に表示するもの 'after_title' => '</h3>', //タイトル後に表示するもの ) ); register_sidebar( array( 'name' => __( 'ウィジェット画面での表示名2', 'My_theme' ), 'id' => '任意のID2', 'description' => __( '表示名の下の説明文', 'My_theme' ), 'before_widget' => '<div class="sidebar %2$s" id="%1$s">', //ウィジェットエリアの先頭に表示するもの 'after_widget' => '</div>', //ウィジェットエリアの終わりに表示するもの 'before_title' => '<h3>', //タイトル前に表示するもの 'after_title' => '</h3>', //タイトル後に表示するもの ) );
- 2. 記事ページへカテゴリごとに分岐表示させる。(アーカイブページに表示する場合はis_categoryを使う)
-
<?php if(in_category( 1 )): ?> <?php dynamic_sidebar( '任意のID1' ); ?> <?php elseif(in_category( 2 )): ?> <?php dynamic_sidebar( '任意のID2' ); ?> <?php endif; ?>