web-dev-qa-db-fra.com

Comment ajouter du CSS personnalisé à certains widgets uniquement

J'ai une barre latérale dynamique standard utilisant register_sidebar et dynamic_sidebar et j'ai besoin du dernier widget de la barre latérale (qui n'aura pas un nombre défini de widgets) pour qu'une classe distincte ('last_widget') soit ajoutée au <li> qui l'enveloppe. Quelle est la meilleure façon de faire cela?

6
John P Bloch

BonjourJohn:

Je pense que c’est ce que vous recherchez (j’expliquerais le code si je pense que c’est explicite; laissez-moi savoir si ce n’est pas le cas):

<?php
add_filter('dynamic_sidebar_params','my_dynamic_sidebar_params');
function my_dynamic_sidebar_params($params) {
    $sidebar_id = $params[0]['id'];
    $sidebar_widgets = wp_get_sidebars_widgets();
    $last_widget_id = end($sidebar_widgets[$sidebar_id]);
    if ($last_widget_id==$params[0]['widget_id'])
        $params[0]['before_widget'] = str_replace(' class="',' class="last_widget ',$params[0]['before_widget']);
    return $params;
}
6
MikeSchinkel

Vous pouvez également utiliser CSS pour sélectionner le dernier widget en utilisant: last-child (bien que IE ne l'aimerait pas), ou utiliser jQuery pour le sélectionner. Mais le code PHP ci-dessus est probablement le meilleur moyen de le faire.

0
Shaun

J'ai écrit un correctif qui fait cela pour le code principal, le ticket associé est # 12615 - Ajoute les "premiers" et "derniers" noms de classe CSS à chaque widget de la barre latérale (Frontend)

Le patch est une solution efficace, il existe des composants internes du widget qui font en sorte que end () se trouve sur le tableau de la barre latérale, comme le suggère Mike, avec son code ne fonctionnant pas correctement (ouais, cela aurait été trop simple, à droite: P) .

Faites-moi savoir si le patch ne s'applique plus proprement. Je fonctionne très bien sur les sites 2.9.2.

0
hakre