web-dev-qa-db-fra.com

is_active_sidebar () renvoie toujours False

Je n'ai jamais obtenu is_active_sidebar() au travail, qu'il y ait ou non des widgets dans la barre latérale, les faux retours me sont toujours renvoyés. Actuellement, je crée une barre latérale pour chaque page de niveau supérieur:

http://Pastebin.com/fX3Rv20f

Je crée mon propre widget (s):

http://Pastebin.com/Bz9hv41z

Et je teste si la barre latérale est active comme ceci:

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

Même lorsque je mets manuellement le titre dans: is_active_sidebar('Test');, il retourne toujours faux. Est-ce que j'utilise mal le conditionnel? Dois-je ajouter une sorte de paramètre? Pourquoi is_active_sidebar() échouerait-il?

2
Howdy_McGee

La fonction is_active_sidebar('Test'); fonctionne correctement si le slug correct est utilisé.

Je pense que le problème est que vous construisez l'ID de barre latérale comme ceci:

$sidebarID = preg_replace("/[\s_]/", "-", strtolower($page->post_title));

Puis, en y ajoutant le sidebar- ...

register_sidebar(array(  
                      'name' => $page->post_title,  
                      'id'   => 'sidebar-'.$sidebarID, 
                      //

Mais vous utilisez le titre non modifié comme slug lorsque vous vérifiez ...

if(is_active_sidebar(get_the_title()))

Vous devez modifier votre code pour vérifier que le slug de la barre latérale est correct. vous devez être cohérent.

Edit: Comme indiqué, la "fonction fonctionne correctement si le correct slug est utilisé". Bien que le Codex indique que le "Nom" est une valeur de paramètre valide, l’utilisation du nom ne fonctionne pas, du moins pas lorsque j’essaie de l’utiliser. Preuve de concept (la plupart du temps copiée du Codex):

$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);

Avec une barre latérale enregistrée avec le code ci-dessus et un widget dans la barre latérale, ce qui suit renvoie false.

var_dump(is_active_sidebar('My Sidebar'));

Lors de l'utilisation de l'ID, le résultat correct est renvoyé: true:

var_dump(is_active_sidebar('my-sidebar-id'));

Je n'ai pas fait assez de recherches pour déterminer si le Codex est erroné ou s'il existe un bogue dans le noyau. Cependant, utiliser des données non normalisées comme un nom de publication est probablement une mauvaise idée dans les deux cas.

3
s_ha_dum