サイドバーにウィジェットがあるかどうかに関係なく、is_active_sidebar()
が機能するようになったことはありません。現在、トップレベルページごとにサイドバーを作成しています。
私は自分のウィジェットを作成します。
サイドバーがアクティブになっているかどうかをテストしています。
if(is_active_sidebar(get_the_title()))
echo 'active';
else
echo 'not active';
私が手動でタイトルをis_active_sidebar('Test');
に入れたとしても、常にfalseを返します。条件式を間違って使用していませんか。何らかの設定を追加する必要がありますか? is_active_sidebar()
が失敗するのはなぜですか?
正しいスラッグが使用されている場合、is_active_sidebar('Test');
関数は正しく機能します。
問題は、サイドバーIDを次のように作成していることだと思います。
$sidebarID = preg_replace("/[\s_]/", "-", strtolower($page->post_title));
それからsidebar-
をそれに追加します...
register_sidebar(array(
'name' => $page->post_title,
'id' => 'sidebar-'.$sidebarID,
//
あなたがチェックするときしかし、あなたはナメクジとして未修正のタイトルを使用しています...
if(is_active_sidebar(get_the_title()))
正しいサイドバースラッグをチェックしているコードを変更する必要があります。あなたは一貫している必要があります。
編集: 述べたように、 "正しいslugが使用されていれば、関数は正しく動作します"。コーデックスは、 "名前"は有効なパラメータ値であると述べていますが、名前を使用してもうまくいきません。少なくともそれを使用しようとしたときにはうまくいきません。概念証明(主にコーデックスからコピー):
$args = array(
'name' => 'My Sidebar',
'id' => 'my-sidebar-id',
'description' => '',
'class' => '',
'before_widget' => '<li id="%1$s" class="widget %2$s">',
'after_widget' => '</li>',
'before_title' => '<h2 class="widgettitle">',
'after_title' => '</h2>'
);
register_sidebar($args);
上記のコードでサイドバーを登録し、サイドバーにウィジェットを追加すると、次のコードはfalse
を返します。
var_dump(is_active_sidebar('My Sidebar'));
IDを使用している間、正しい結果を返します - true
:
var_dump(is_active_sidebar('my-sidebar-id'));
私は、Codexが間違っているのか、それともCoreにバグがあるのかを判断するのに十分な調査をしていません。ただし、投稿名のように正規化されていないデータを使用することは、どちらの場合もおそらく悪い考えです。