WordPressではウィジェットエリア(サイドバーなど)をテンプレートに表示できますが、投稿タイプやページごとに異なるウィジェットを表示したい場合もあります。たとえば「ブログ記事では通常のサイドバー」「固定ページではカスタムバナー」といった出し分けが求められるケースです。
この記事では、投稿タイプ・ページ単位でウィジェットエリアを条件付きで出し分ける方法を解説します。
ウィジェットエリアを複数登録する
まずは、functions.phpに複数のウィジェットエリアを登録します。
function my_custom_widgets() {
register_sidebar(array(
'name' => 'ブログ用サイドバー',
'id' => 'sidebar-blog',
'before_widget' => '<div class="widget">',
'after_widget' => '</div>',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
));
register_sidebar(array(
'name' => '固定ページ用バナー',
'id' => 'sidebar-page',
'before_widget' => '<div class="widget">',
'after_widget' => '</div>',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
));
}
add_action('widgets_init', 'my_custom_widgets');
条件付きでウィジェットを呼び出す
次に、サイドバーを表示するテンプレート(たとえば sidebar.php
)に条件分岐を記述します。
if (is_singular('post')) {
if (is_active_sidebar('sidebar-blog')) {
dynamic_sidebar('sidebar-blog');
}
} elseif (is_page()) {
if (is_active_sidebar('sidebar-page')) {
dynamic_sidebar('sidebar-page');
}
} else {
// デフォルトのウィジェットエリア
if (is_active_sidebar('sidebar-1')) {
dynamic_sidebar('sidebar-1');
}
}
このようにすることで、投稿(ブログ記事)では「sidebar-blog」、固定ページでは「sidebar-page」が表示されるようになります。
特定ページだけに限定する例
さらに、特定の固定ページ(例:会社情報ページ)のみ別ウィジェットを出す場合は、以下のようにIDやスラッグで分岐します。
if (is_page('company')) {
dynamic_sidebar('sidebar-company');
}
もしくはページIDで判定:
if (is_page(42)) {
dynamic_sidebar('sidebar-company');
}
カスタム投稿タイプごとに切り替える
カスタム投稿タイプ(例:お知らせ、商品紹介など)ごとにウィジェットを変えたい場合も同様です。
if (is_singular('news')) {
dynamic_sidebar('sidebar-news');
} elseif (is_singular('products')) {
dynamic_sidebar('sidebar-products');
}
まとめ
ウィジェットエリアは、投稿タイプやページ条件に応じて自由に出し分けることができます。複数の register_sidebar()
を定義し、dynamic_sidebar()
を条件分岐させることで、柔軟なレイアウト設計が可能になります。
サイト構成に応じた最適なウィジェット配置を行い、ユーザー体験や導線を強化しましょう。