WordPressで特定のウィジェットエリアにウィジェットがあるかどうかで条件分岐させる方法

例えば「sticky-widgets」というウィジェットエリアがあったとします。

「sticky-widgets」に入っているウィジェットは、画面をスクロールしても追いかけてくるように「追尾」させちゃおう、という役割を持たせたい。

そこで、「register_sidebar」を使ってオリジナルのウィジェットエリアを作ります。

functions.phpに追記するコードは下のような感じです。

//追尾ウィジェット
register_sidebar(array(
 'id' => 'sticky-widgets',
 'name' => '追尾ウィジェット',
 'description' => 'スクロールするとついてくるよ',
 'before_widget' => '<div id="%1$s" widget %2$s">',
 'after_widget' => '</div>',
 'before_title' => '<h6>',
 'after_title' => '</h6>'
));

コードがうまく動けば、下のようなウィジェットエリアが作られます。

こんなウィジェットエリアが作られる

iswidgetarea00

ウィジェットエリアの確認は、WordPressの管理画面→「外観」→「ウィジェット」から行えます。

ここからが本題

追尾用のスクリプトを動かすために、html要素にclassを付与した「<div class=”sticky”>」などを作って、追尾ウィジェット全体を包み込む必要があったとします。

<div class="sticky">追尾させたいウィジェット</div>

この追尾ウィジェットを使用しない場合はウィジェットエリアに何も入れなければいいんですけど、そうなるとhtml要素「<div class=”sticky”>」の中身が空っぽのまま出力されてしまいます。要らない・・・

その状態を回避するために「is_active_sidebar」を使って、「sticky-widgets」にウィジェットが入っているかどうかで出力する内容を変更してあげればOKです。

例えば下のようなコードを書くと、ウィジェットが入っていなければ何も出力されないです。

<?php if( is_active_sidebar( 'sticky-widgets' ) ){ ?>
 <div class="sticky">
  <?php dynamic_sidebar("sticky-widgets"); ?>
 </div>
<?php } ?>

「is_active_sidebar」にウィジェットID「sticky-widgets」を指定して「is_active_sidebar( ‘sticky-widgets’ )」とすることでできます。

指定できる値は他にもあるようなので、もっと知りたい場合はCodexをご参考ください。

著者:bouya Imamura