is_dynamic_sidebar()と dynamic_sidebar()のID指定の違い

WordPressでサイトを作成するとき、どんなサイトでも使うであろうWidget。
手軽に設置できて便利ですよね。

自作のTemplateでWidgetを使う場合、まず自作Theme内のfunctions.phpに

などと書き加え、Widget表示箇所の’name’とその前後のtagやタイトルのtagをしていしておきます。

そしてWidgetを表示させたい箇所、例えばsidebar.phpなどに

と書き込んでおけば、「ダッシュボード > 外観 > ウィジェット」の右側に表示される「hoge-hoge-1」のセクションに、目的のWidgetをドラッグする事で使える様になります。

は ‘hoge-hoge-1’ でWidgetを使っていない場合、functions.php内で設定した、Widgetの前後に表示されるtagも一緒に表示されなくなります。

これとは別に、Widgetが有効か(使っているか)を判定するtemplate tagに is_active_sidebar( ) があります。

‘hoge-hoge-1’ の有効判定をさせようと

とやっても、何も表示されません。

がbool(false)となるのです。

???と思い、「wp-includes/widgets.php」を見てみると、WordPress3.8なら975行目で

となっているのですが、wp_get_sidebars_widgets()で取り出した連想配列のkeyが「sidebar-整数」の型にしてやらないといけないんですね。
is_active_sidebar( $index )の$indexは「整数」か「sidebar-整数」しか使えず、「整数」の場合は前に「sidebar-」が加えられ、「sidebar-整数」の型に整形されて$indexに代入されます。

print_r(wp_get_sidebars_widgets())の結果が

となり、keyは「sidbar-整数」の型になっていますから、is_active_sidebar(‘hoge-hoge-1’)と、functions.phpで設定した ‘name’ は使えないわけです。

「sidbar-1」「sidbar-2」「sidbar-3」の整数は、functions.phpのregister_sidebar()でWidgetを設定した時、上の方から順に番号が振られます(追加でWidgetを設定した場合は追加分が一番大きい数字になる)。

is_active_sidebar(‘hoge-hoge-1’)はfunctions.phpのregister_sidebar()で最初に設定したものなので、is_active_sidebar(‘sideber-1’)とし

とすると「true」と表示されました。

因に、dynamic_sidebar()は、「wp-includes/widgets.php」のWordPress3.8なら845行目に書かれています。

となっています。
$wp_registered_sidebarsでWidgetの情報を連想配列として取得し、各値の ‘name’ をインデックスとして使っています。
$wp_registered_sidebarsをprint_r()で表示させてみると、

となっています。
この違いがあるので、dynamic_sidebar()functions.phpのregister_sidebar()で設定した ‘name’ が使えるんですね。