it-swarm.com.de

Registrieren von Seitenleisten und Seitenleisten-Widgets. Seitenleisten-Widgets werden nicht angezeigt

Ich registriere Sidebars und Sidebar-Widgets.

Das Thema unterstützt derzeit zwei Seitenleisten. Primär und sekundär.

add_action('widgets_init', array($this, 'add_sidebars'), 10, 2);

public function add_sidebars(){
    register_sidebar(array(
        'name' => 'Primary Sidebar',
        'id' => 'mbe-sidebar-primary-sidebar',
        'description' => '',
        'class' => 'mbe-sidebar',
        'before_widget' => '<div id="%1$s" class="widget %2$s">',
        'after_widget' => '</div>',
        'before_title' => '<h3 class="widget-title">',
        'after_title' => '</h3>'
    ));
    register_sidebar(array(
        'name' => 'Secondary Sidebar',
        'id' => 'mbe-sidebar-secondary-sidebar',
        'description' => '',
        'class' => 'mbe-sidebar',
        'before_widget' => '<div id="%1$s" class="widget %2$s">',
        'after_widget' => '</div>',
        'before_title' => '<h3 class="widget-title">',
        'after_title' => '</h3>'
    ));
    $this->add_sidebar_widgets();
}

Dann füge ich alle voreingestellten Widgets (Post-Objekte eines Post-Typs) als verfügbares Sidebar-Widget hinzu.

private function add_sidebar_widgets(){
    global $mbe_content;
    $widgets = $mbe_content->get_content('archive', 'mbe-sidebar-widgets');
    if(!$widgets){
        return;
    }
    foreach($widgets as $widget){
        wp_register_sidebar_widget(
            'mbe-sidebar-widget-'.$widget['post_name'],
            $widget['post_title'],
            array($this, 'display_widget'),
            array(
                'description' => 'Sidebar Widget'
            ),
            ''
        );
    }
}

public function display_widget($args, $params){
    echo 'widget';
}

Ich habe diese Seitenleisten-Widgets auch als aktive Widgets in der primären Seitenleiste festgelegt. Nun zum Beispiel auf einer Themenebene, wenn ich nur eine dynamische Seitenleiste verwenden wollte ...

if(is_active_sidebar('mbe-sidebar-primary-sidebar')){
    dynamic_sidebar('mbe-sidebar-primary-sidebar');
} else{
    echo 'NO PRIMARY WIDGETS!'.PHP_EOL;
}

Es zeigt das "Widget" meiner Widgets, aber dort wird die Ausgabe für meine Widgets erfolgen. Das spielt also keine Rolle. Der Punkt ist, die dynamische Seitenleiste funktioniert und ich kann meinen Widget-Outputer sehen.

Eine Frage, die ich habe, ist, warum ich der Seitenleiste ein einfaches Standard-WordPress-Widget hinzufüge, das nichts in der Seitenleiste ausgibt. Es ist so, als ob es gar nicht existiert oder so.

Wie kann ich meine Widgets in der Seitenleiste ausgeben lassen, während die von WordPress bereitgestellten Standard-Seitenleisten-Widgets auch in der Seitenleiste ausgegeben werden?

Ich dachte ursprünglich, es sei meine function display_widget() Also habe ich versucht, alle Widgets abzurufen, sie zu durchlaufen und dann the_widget() für jede ihrer Widget-IDs aufzurufen, aber dann erhalte ich Fehler, dass dieses Widget nicht gefunden wurde, bla bla.

3
Michael Ecklund

Überprüfen Sie Ihre Vorlagendatei aus Ihrem Thema. Möglicherweise werden dort einige Widgets manuell hinzugefügt, wenn keine anderen Widgets aktiviert sind.

Wenn dies der Fall ist, ändern Sie die bedingte Anweisung in Ihrer Seitenleistenvorlage so, dass Ihre Widgets nach den dort festgelegten Standardwerten ausgegeben werden.

@s_ha_dum ist dem auf den Grund gegangen.

1
MikeNGarrett