web-dev-qa-db-fra.com

register_sidebar 'after_widget' sur les widgets personnalisés ne mettant pas en œuvre, cause des widgets imbriqués

En enregistrant ma barre latérale, je veux que chaque widget soit enveloppé dans <aside>. Cela fonctionne très bien lorsque vous utilisez les widgets intégrés tels que Calendrier ou recherche . Cependant, lorsque j'ajoute des widgets que j'ai créés moi-même, la fermeture <aside> ne reçoit pas de sortie. Par conséquent, je reçois une structure semblable à:

<widgets-area>
    <custom-widget>
        <custom-widget>
        </custom-widget>
    </custom-widget>
</widgets-area>

Quand cela devrait ressembler à:

<widgets-area>
    <custom-widget>
    </custom-widget>
    <custom-widget>
    </custom-widget>
</widgets-area>

register_sidebar

register_sidebar( array(
    'name'          => __( 'Sidebar', 'mysite' ),
    'id'            => 'sidebar-1',
    'before_widget' => '<aside id="%1$s" class="widgets__widget widgets__widget--%2$s">',
    'after_widget'  => '</aside>',
    'before_title'  => '<h1 class="widgets__widget__title">',
    'after_title'   => '</h1>',
) );

Le code de mes widgets personnalisés inclut à la fois echo $args['before_widget'] et echo $args['after_widget'] qui, je suppose, est utilisé pour renvoyer en écho les codes "before_widget" et "after_widget" déclarés dans register_sidebar().

Pourquoi mes widgets personnalisés ne se ferment-ils pas correctement, alors que les widgets intégrés le sont? Qu'est-ce que je rate? Outre la structure, les widgets personnalisés fonctionnent correctement.

2
tommyf

Il s’avère que j’ai écrasé la widget($args) dans le widget. Par conséquent, le before_widget est répercuté mais pas le after_widget.

J'ai renommé la variable widget($args) et toutes ses références, puis les plugins ont fonctionné comme prévu.

2
tommyf