Как добавить пользовательский CSS только к определенным виджетам

19 авг. 2010 г., 00:53:47
Просмотры: 1.89K
Голосов: 6

У меня есть стандартная динамическая боковая панель, использующая register_sidebar и dynamic_sidebar, и мне нужно, чтобы последний виджет в боковой панели (количество виджетов может быть разным) имел особый класс ('last_widget'), добавленный к тегу <li>, который его оборачивает. Как лучше всего это сделать?

0
Все ответы на вопрос 3
0

Привет, Джон:

Думаю, это то, что ты ищешь (код довольно самодокументируемый, но дай знать, если нужно пояснение):

<?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;
}
19 авг. 2010 г. 01:36:52
0

Вы также можете использовать CSS для выбора последнего виджета с помощью :last-child (хотя IE это не понравится), или использовать jQuery для его выбора. Но PHP код выше, вероятно, лучший способ сделать это.

19 авг. 2010 г. 01:48:22
0

Я написал патч, который делает это для основного кода, связанный тикет: #12615 - Добавление CSS-классов "first" и "last" для каждого виджета в сайдбарах (Фронтенд)

Этот патч является рабочим решением. Внутренняя структура виджетов такова, что использование end() для массива сайдбара, как предложил mike в своём коде, не работает корректно (Да, это было бы слишком просто, правда? :P).

Дайте мне знать, если патч не применяется чисто. Я успешно использую его на сайтах с версией 2.9.2.

19 авг. 2010 г. 09:23:52