web-dev-qa-db-fra.com

Configuration de widgets dans wordpress avec un identifiant unique pour l'argument after_title

J'essaie d'obtenir le plugin collapsible-widget-area afin que chaque widget qu'il crée à l'intérieur de la zone réductible ait un identifiant unique <div> après son titre.

function get_args() {
    $this->args = apply_filters( 'collapsible-widget-area-args', array(
        'name'          => __( 'Collapsible Widget Area', 'collapsible-widget-area' ),
        'id'            => 'collapsible-widget-area',
        'description'   => __( 'Drag widgets into this area in order to use them inside of the Collapsible Widget.', 'collapsible-widget-area' ),
        'before_widget' => '<div id="%1$s" class="widget %2$s collapsible-item">',
        'after_widget'  => '</div>',
        'before_title'  => '<h2 class="widgettitle">',
        'after_title'   => '</h2><div id="i_want_to_be_a_unique_id_for_every_widget_but_i_am_not"></div>',
    ) );
    $this->sidebar_id = $this->args['id'];
    if ( ! class_exists( 'collapsible_widget' ) ) {
        require_once( 'class.collapsible-widget.php' );
    }
    add_action( 'widgets_init', array( $this, 'register_widget' ) );
}

C'est la fonction qui définit les arguments, mais si je comprends bien, elle n'est appelée qu'une fois et les arguments s'appliquent à tous les widgets. Est-ce que quelqu'un peut me dire maintenant d'utiliser un objet comme le %1$s pour le before_widget ou même mieux la même valeur exacte dans le after_title?

L'ensemble du plugin peut être visualisé à dans le plugin wordpress svn , la fonction que je cherche ci-dessus appartient à la classe .collapsible-widget-area.php et la seule chose que j’ai ajoutée jusqu’à présent est le <div id="i_want_to_be_a_unique_id_for_every_widget_but_i_am_not"></div>.

Ce n'est pas une question "écris-moi un programme", c'est juste un exemple que je donne. Peut-être faut-il une autre solution complète pour y parvenir, ou c'est très facile à faire avec ce plugin qui étend déjà la classe de widgets wordpress, je ne le sais pas.

1
amy

En regardant widget.php dans tracsprintf() uniquement s'exécute sur before_widget (ligne 884):

$params[0]['before_widget'] = sprintf($params[0]['before_widget'], $id, $classname_);

Par conséquent, cela ne fonctionnera pour aucun des autres arguments.

Je me demandais si vous pouviez utiliser le filtre dynamic_sidebar_params, mais les arguments $ id et $ classname_ ne sont pas transmis au filtre. En dehors du cœur du piratage, je ne suis pas sûr qu'il y ait autre chose à faire que de modifier le bootstrap de Twitter ou d'utiliser jQuery pour ajouter l'ID après le chargement de la page.

2
mrwweb