dynamic_sidebar()
ダイナミックサイドバーの表示
2025/08/22
dynamic_sidebar() は、ダイナミックサイドバーを表示させるときに使用します。このダイナミックサイドバーは、ウィジェットがまとめられているものを指します。
【参考】ダイナミックサイドバーとは – 初心者のWordPressホームページの作り方マニュアル
ここでの「サイドバー」は、このウィジェットセットのことを意味するとして読み進めてください。
登録されているサイドバーは、このdynamic_sidebar() を使用して特定のウィジェットを任意の場所に呼び出すことができます。
構文と返り値
【構文】
dynamic_sidebar( $index )【返り値】bool(true | false) ダイナミックサイドバーが表示できれば true、なければ false。
パラメーター
-
$index (int | string)オプション
ダイナミックサイドバーのインデックス、名前、または ID。
【初期値】 1(sidebar-1)
デフォルトのまま使用する場合はulタグで囲む
dynamic_sidebar() のHTML出力は、デフォルトで li 要素です。
【登録と出力コード】
// サイドバーの登録
register_sidebar();
// サイドバーの出力
dynamic_sidebar();【検索フォームをウィジェット登録したサイドバーのHTML出力例】
<li id="block-13" class="widget widget_block widget_search">
<form role="search" method="get" action="http://wp-demo.local/" class="wp-block-search__button-outside wp-block-search__text-button wp-block-search">
<label class="wp-block-search__label" for="wp-block-search__input-1">検索</label>
<div class="wp-block-search__inside-wrapper ">
<input class="wp-block-search__input" id="wp-block-search__input-1" placeholder="" value="" type="search" name="s" required="">
<button aria-label="検索" class="wp-block-search__button wp-element-button" type="submit">検索</button>
</div>
</form>
</li>そのため、HTMLをカスタマイズしない場合は、ul タグで囲みます。
<ul id="my_widget"><?php dynamic_sidebar(); ?></ul>特定のサイドバーの指定
テーマで登録済みのサイドバーに「id」または「name」パラメータが指定されている場合は、$index パラメータにそれらを渡すことができます。
そうでない場合は、数値のインデックスを渡して、そのインデックスのサイドバーを表示できます。
register_sidebar() のみで登録すると、 名前は「サイドバー 1」、id は 「sidebar-1」が設定されます。以下のように複数同じコードを記述すると名前は「サイドバー 2」、id は 「sidebar-2」と数字がカウントアップされていきます。
register_sidebar();
register_sidebar();// 1つ目のサイドバー
dynamic_sidebar();
// 2つ目のサイドバー
dynamic_sidebar(2);インデックス番号で指定する際には、上記コードのようにクォーテーション「 '' 」は不要ですが、名前やIDの場合は必要です。
// 名前で指定
dynamic_sidebar('サイドバー 2');
// IDで指定
dynamic_sidebar('sidebar-2');デフォルトの名前の場合「サイドバー 2」と、半角スペースが必要です。「サイドバー2」だと出力してくれません。
サイドバーがない場合に別のコードを指定
以下のコードでは、サイドバーにウィジェットが一つもない場合やそもそもサイドバーが登録されていない場合、別のコードを表示させ、あればサイドバーを表示します。
<ul id="my_widget">
<?php if (!dynamic_sidebar()) : ?>
<li><!-- code block --></li>
<li><!-- code block --></li>
<?php endif; ?>
</ul>