web-dev-qa-db-ja.com

is_active_sidebar()は常にFalseを返します

サイドバーにウィジェットがあるかどうかに関係なく、is_active_sidebar()が機能するようになったことはありません。現在、トップレベルページごとにサイドバーを作成しています。

http://Pastebin.com/fX3Rv20f

私は自分のウィジェットを作成します。

http://Pastebin.com/Bz9hv41z

サイドバーがアクティブになっているかどうかをテストしています。

if(is_active_sidebar(get_the_title()))
    echo 'active';
else
    echo 'not active';

私が手動でタイトルをis_active_sidebar('Test');に入れたとしても、常にfalseを返します。条件式を間違って使用していませんか。何らかの設定を追加する必要がありますか? is_active_sidebar()が失敗するのはなぜですか?

2
Howdy_McGee

正しいスラッグが使用されている場合、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にバグがあるのか​​を判断するのに十分な調査をしていません。ただし、投稿名のように正規化されていないデータを使用することは、どちらの場合もおそらく悪い考えです。

3
s_ha_dum