is_active_sidebar じゃダメなこと


スポンサーリンク

ウィジェットエリアの存在の有無をしらべるのが is_active_sidebar って関数。
じゃあ、そのウィジェットエリアに中身がはいってるのか?ってのが気になるところ。
参考→NeGiMeMo.net
 
実際問題、ウィジェットエリアに中身がなかったらBOXだしたくないって言う場合、エリアがあるかどうかではなく、そのエリアに中身があるかどうかを知りたいわけで、参考にさせていただいた、NeGiMeMo.net 様では、「is_active_sidebar を使ったら~」のようなことを書かれていますが、いや、それだと目的を果たせなかったのですわ。ってことで、モジュールを拝借いたしました。
 
function wp_isset_widets($index = 1,$echo = false) {
	global $wp_registered_sidebars;
 
	if (is_int($index)) {
		$index = "sidebar-$index";
	} else {
		$index = sanitize_title($index);
		foreach((array)$wp_registered_sidebars as $key => $value) {
			if (sanitize_title($value['name']) == $index) {
				$index = $key;
				break;
			}
		}
	}
 
	$sidebar_widgets = wp_get_sidebars_widgets();
 
	if (empty($wp_registered_sidebars[$index]) || !array_key_exists($index,$sidebar_widgets) || !is_array($sidebar_widgets[$index]) || empty($sidebar_widgets[$index])) return false;
 
	$result = count($sidebar_widgets[$index]);
 
	if ($echo) {
		echo $result;
	} else {
		return $result;
	}
}
 
実際どう使うかといえば、まぁ、NeGiMeMo.net様にもあるように・・・
<?php if ( wp_isset_widets( 'インフォメーション',false ) ) : ?>
<div class="item w2">
<article>
<div class="inner">
<ul class="bxslider">
  <li>
<?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('インフォメーション') ) : ?>
<?php endif; ?>
  </li>
</ul>
</div>
</article>
</div>
<?php endif; ?>
これで 「インフォメーションのウィジェットエリアが空なら」item w2 のBOXを吐き出さずに済むってことになりんした。

スポンサーリンク