web-dev-qa-db-fra.com

Impossible d'enregistrer les widgets dans les barres latérales personnalisées

Je travaille sur un thème enfant du thème Toolset Bootstrap. Je dois créer une barre latérale personnalisée. J'ai donc enregistré la nouvelle barre latérale dans le fichier function.php de mon thème enfant:

function wpbootstrap_register_newsidebar() {

/* Register the new sidebar. */
register_sidebar(
    array(
        'id' => 'sidebar-999',
        'name' => __( 'Home sidebar', 'wpbootstrap' ),
        'description' => __( 'This sidebar will display only on the homepage.', 'wpbootstrap' ),
        'before_widget' => '<aside id="%1$s" class="widget %2$s">',
        'after_widget' => '</aside>',
        'before_title' => '<h3 class="widget-title">',
        'after_title' => '</h3>'
    )
);
} add_action( 'widgets_init', 'wpbootstrap_register_newsidebar' );

Je peux voir la nouvelle barre latérale dans l'écran d'administration, y faire glisser des widgets, ajouter un titre, les réorganiser, mais si je recharge la page, tout le widget disparaît de la barre latérale. Le thème parent a déjà 3 zones de widgets intégrées, qui fonctionnent parfaitement: je peux ajouter et enregistrer des widgets dans ces zones. De plus, si je passe à un thème par défaut, tel que Twenty Fourteen, et tente d'enregistrer une barre latérale personnalisée à l'aide du même code que celui collé ci-dessus, j'obtiens une zone de barre latérale personnalisée entièrement fonctionnelle. Donc, apparemment, mon code n'est pas le problème.

J'ai essayé de publier la question sur le forum d'assistance des fournisseurs du thème parent, mais je n'ai pas encore entendu parler d'eux. J'ai donc pensé à demander à la communauté plus large WP au cas où quelqu'un rencontrerait un problème similaire.

Je ne suis pas un gourou WP et je ne sais pas grand chose de la manière dont les zones personnalisées avec widgets sont créées et stockées dans l'environnement WP, mais si quelqu'un peut me diriger dans la bonne direction, je Je serais plus qu'heureux d'en apprendre un peu plus à ce sujet.

Malheureusement, je travaille sur une version de développement local d'un site Web et je ne peux donc pas fournir d'URL de test.

1
kikaweb

Ok, l’équipe de support a finalement répondu à ma question, et si même s’il n’y avait pas de solution réelle, nous avons suggéré une solution de contournement. Puisque la réponse est enfouie au plus profond du forum des utilisateurs du fournisseur - , cliquez ici - je partage la solution ici, juste au cas où quelqu'un aurait le même problème avec ce thème ou un autre.

Fondamentalement, c'est un bogue dans le thème parent (Toolset Bootstrap), qui réinitialise les barres latérales personnalisées. Pour remplacer ce comportement, j'ai utilisé cet extrait de code pour enregistrer mes barres latérales, comme suggéré par l'équipe de support:

//Override check sidebar widgets filter in child theme
function wpbootstrap_checksidebars_widgets($sidebars_widgets) {
    return $sidebars_widgets;
}
add_filter('sidebars_widgets','wpbootstrap_checksidebars_widgets' );
//Now user can add custom widget areas
function custom_widget_areas_init() {
    register_sidebar( array(
    'name' => 'Front Page Widget Area',
    'id' => 'frontpage-widgets',
    'before_widget' => '<div>',
    'after_widget' => '</div>',
    'before_title' => '<h2 class="rounded">',
    'after_title' => '</h2>',
    ) );
}
add_action( 'widgets_init', 'custom_widget_areas_init' );

Les widgets restent maintenant dans les barres latérales nouvellement enregistrées. Merci quand même aux utilisateurs qui ont essayé de m'aider.

1
kikaweb

l'ID de la barre latérale (dans la fonction php) devrait être LOWERCASE !!!!!!!!!!!

2
T.Todua

Cela semble tester correctement pour moi.

function register_home_sidebar() {

/* Register the new sidebar. */
register_sidebar(
    array(
        'id' => 'home-sidebar',
        'name' => __('Home Sidebar'),
        'description' => __( 'This sidebar will display only on the homepage.'),
        'before_widget' => '<aside id="%1$s" class="widget %2$s">',
        'after_widget' => '</aside>',
        'before_title' => '<h3 class="widget-title">',
        'after_title' => '</h3>'
          )
     );
} add_action( 'widgets_init', 'register_home_sidebar' );

Peut-être avez-vous une fonction déjà appelée par l'autre nom?

1
Howard E