WordPress : Comment puis-je ajouter un identifiant de classe incrémentiel à mes widgets de la barre latérale ?
Mon code de widget de barre latérale dans functions.php ressemble à ceci…
if ( function_exists('register_sidebar') )
register_sidebar(array(
'name' => 'Home Sidebar',
'id' => 'home-sidebar-widget',
'before_widget' => '<div class="menu side %2$s">',
'after_widget' => '</div>',
'before_title' => '<h4 class="sidebarTitle">',
'after_title' => '</h4>',
));
Ce qui crée ce balisage sur le site…
<div class="menu side widget_text">
<h4>widget 1 title</h4>
<div class="textwidget">Lorem ipsum dolor sit amet</div>
</div>
<div class="menu side widget_text">
<h4>widget 2 title</h4>
<div class="textwidget">Lorem ipsum dolor sit amet</div>
</div>
Voici ce dont j’ai besoin (il suffit d’ajouter un numéro à la collection de classes) …
<div class="menu side s1 widget_text">
<h4>widget 1 title</h4>
<div class="textwidget">Lorem ipsum dolor sit amet</div>
</div>
<div class="menu side s2 widget_text">
<h4>widget 2 title</h4>
<div class="textwidget">Lorem ipsum dolor sit amet</div>
</div>
Je voudrais ajouter une variable de comptage afin que chaque barre latérale obtienne un nombre que je peux ensuite utiliser pour le ciblage CSS. Comment?
Solution n°1 trouvée
Vous pouvez cibler des éléments spécifiques en CSS comme ça.. (ne fonctionnera pas pour tous les navigateurs bien sûr).
#sidebar div.menu.side:nth-child(1) { /* First */ }
#sidebar div.menu.side:nth-child(2) { /* Second */ }
#sidebar div.menu.side:nth-child(3) { /* Third */ }
..and so on...
Ou utilisez jQuery pour ajouter les classes.
jQuery(document).ready( function($) {
var wi = 1;
$('#sidebar div.menu.side').each( function() {
$(this).addClass( 'widget-s' + wi );
wi = wi + 1;
});
});
L’approche de wyrfel semble cependant pouvoir fonctionner pour vous, je suggérerais que sur les deux ci-dessus.
Solution n°2 trouvée
Il ne semble pas y avoir de moyen facile de le faire. Cependant, vous pouvez essayer cette approche plutôt hackish :
add_filter('dynamic_sidebar_params', 'my_sidebar_params_cb');
function my_sidebar_params_cb($params) {
global $my_widget_counter;
if (empty($my_widget_counter)) $my_widget_counter = 1;
else $my_widget_counter++;
$params[0]['before_widget'] = str_replace('class="', 'class="widget_nr_'.$my_widget_counter.' ', $params[0]['before_widget']);
return $params;
}
0 commentaire