web-dev-qa-db-fra.com

Enregistrement des barres latérales et des widgets de la barre latérale. Les widgets de la barre latérale ne s'affichent pas

J'enregistre des barres latérales et des widgets de la barre latérale.

Le thème prend actuellement en charge deux barres latérales. Primaire et secondaire.

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();
}

Ensuite, j'ajoute tous les widgets prédéfinis (objets de publication d'un type de publication) en tant que widget de barre latérale disponible.

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';
}

J'ai également défini ces widgets de la barre latérale en tant que widgets actifs dans la barre latérale principale. Maintenant, par exemple, au niveau du thème, si je voulais juste utiliser une barre latérale dynamique ...

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

Il montre le "widget" de mes widgets, mais c'est là que la sortie de mes widgets se produira. Donc, cela n'a pas d'importance. Le fait est que la barre latérale dynamique fonctionne et que je peux voir mon émetteur de widgets.

Une question que je me pose est la suivante: comment se fait-il que j’ajoute un widget WordPress par défaut simple à la barre latérale, il n’affiche rien dans la barre latérale? C'est comme si ça n'existait même pas ou quelque chose comme ça.

Comment puis-je obtenir mes widgets à afficher sur la barre latérale, tout en permettant aux widgets par défaut de la barre latérale fournis par WordPress d'être également affichés sur la barre latérale?

À l'origine, je pensais que c'était mon function display_widget(). J'ai donc essayé de récupérer tous les widgets, de les parcourir en boucle, puis d'appeler the_widget() sur chacun de leurs ID de widget, mais des erreurs se produisaient à propos de ce widget, Blah blah.

3
Michael Ecklund

Vérifiez votre fichier de modèle à partir de votre thème. Certains widgets peuvent y être ajoutés manuellement si aucun autre n'est activé.

Si tel est le cas, modifiez l'instruction conditionnelle dans votre modèle de barre latérale afin que vos widgets soient affichés après les valeurs par défaut définies ici.

@s_ha_dum est allé au fond des choses.

1
MikeNGarrett