web-development-kb-pt.site

Como faço para adicionar CSS personalizado para apenas alguns widgets

Eu tenho uma barra lateral dinâmica padrão usando register_sidebar e dynamic_sidebar e eu preciso do último widget na barra lateral (que não terá um número definido de widgets) para ter uma classe distinta ('last_widget') adicionada ao <li> que o envolve. Qual é a melhor forma de fazer isso?

6
John P Bloch

Oi John :

Eu acho que isso é o que você está procurando (eu explicaria o código, acho que é auto-explicativo; deixe-me saber se não):

<?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

Você também pode usar CSS para selecionar o último widget usando: último filho (embora IE não goste disso), ou use jQuery para selecioná-lo. Mas o código PHP acima é provavelmente a melhor maneira de fazer isso.

0
Shaun

Eu escrevi um patch que faz isso para o código principal, o ticket relacionado é # 12615 - Adicionar "primeiro" e "último" nomes de classe CSS para cada Widget em barras laterais (Frontend)

O patch é uma solução de trabalho, existem alguns elementos internos de widgets que fazem uso de end () na barra da barra lateral, como Mike sugere com seu código não está funcionando corretamente (Sim, isso teria sido muito simples, certo: P).

Deixe-me saber se o patch não se aplica a limpeza por mais tempo. Eu tenho isso correndo muito bem em 2.9.2 sites.

0
hakre