Come Aggiungere CSS Personalizzato Solo a Determinati Widget
Ho una sidebar dinamica standard che utilizza register_sidebar
e dynamic_sidebar
e ho bisogno che l'ultimo widget nella sidebar (che non avrà un numero predefinito di widget) abbia una classe distinta ('last_widget'
) aggiunta al <li>
che lo racchiude. Qual è il modo migliore per farlo?
Ciao John:
Penso che questo sia ciò che stai cercando (spiegherei il codice ma credo sia autoesplicativo; fammi sapere se non lo è):
<?php
add_filter('dynamic_sidebar_params','my_dynamic_sidebar_params');
function my_dynamic_sidebar_params($params) {
// Ottiene l'ID della sidebar corrente
$sidebar_id = $params[0]['id'];
// Recupera tutti i widget delle sidebar
$sidebar_widgets = wp_get_sidebars_widgets();
// Ottiene l'ID dell'ultimo widget nella sidebar corrente
$last_widget_id = end($sidebar_widgets[$sidebar_id]);
// Se il widget corrente è l'ultimo, aggiunge la classe 'last_widget'
if ($last_widget_id==$params[0]['widget_id'])
$params[0]['before_widget'] = str_replace(' class="',' class="last_widget ',$params[0]['before_widget']);
return $params;
}

Ho scritto una patch che fa questo per il codice core, il ticket relativo è #12615 - Aggiungi classi CSS "first" e "last" a ogni Widget nelle sidebar (Frontend)
La patch è una soluzione funzionante, ci sono alcuni aspetti interni dei widget che rendono inutilizzabile end() sull'array della sidebar come suggerito da Mike con il suo codice (Sì, sarebbe stato troppo semplice, vero :P ).
Fammi sapere se la patch non si applica più correttamente. La sto utilizzando senza problemi su siti con versione 2.9.2.
