it-swarm.com.de

is_active_sidebar () gibt immer False zurück

Ich habe is_active_sidebar() noch nie zum Laufen gebracht, egal ob Widgets in der Seitenleiste sind oder nicht, ich erhalte immer eine falsche Antwort. Momentan erstelle ich eine Seitenleiste für jede Seite der obersten Ebene:

http://Pastebin.com/fX3Rv20f

Ich erstelle meine eigenen Widgets:

http://Pastebin.com/Bz9hv41z

Und ich teste, ob die Seitenleiste so aktiv ist:

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

Auch wenn ich den Titel manuell eingebe: is_active_sidebar('Test');, wird immer false zurückgegeben. Benutze ich die Bedingung falsch? Muss ich eine Einstellung hinzufügen? Warum sollte is_active_sidebar() fehlschlagen?

2
Howdy_McGee

Die Funktion is_active_sidebar('Test'); funktioniert ordnungsgemäß, wenn der richtige Slug verwendet wird.

Ich denke, das Problem ist, dass Sie die Sidebar-ID wie folgt erstellen:

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

Dann sidebar- voranstellen ...

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

Sie verwenden jedoch den nicht geänderten Titel als Slug, wenn Sie überprüfen ...

if(is_active_sidebar(get_the_title()))

Sie müssen Ihren Code ändern, um festzustellen, ob die Seitenleiste korrekt ist. Sie müssen konsequent sein.

Edit: Wie bereits erwähnt, funktioniert die "Funktion korrekt, wenn das richtige slug verwendet wird". Während der Codex angibt, dass der "Name" ein gültiger Parameterwert ist, funktioniert die Verwendung des Namens nicht, zumindest nicht, wenn ich versuche, ihn zu verwenden. Proof of Concept (meist kopiert aus dem 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);

Bei einer mit dem obigen Code registrierten Seitenleiste und einem Widget in der Seitenleiste wird Folgendes zurückgegeben: false.

var_dump(is_active_sidebar('My Sidebar'));

Bei Verwendung der ID wird das richtige Ergebnis zurückgegeben - true:

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

Ich habe nicht genug recherchiert, um festzustellen, ob der Codex falsch ist oder ob es einen Fehler im Core gibt. Die Verwendung von nicht normalisierten Daten wie einem Post-Namen ist jedoch in beiden Fällen wahrscheinlich eine schlechte Idee.

3
s_ha_dum