Как добавить пользовательский CSS только к определенным виджетам
У меня есть стандартная динамическая боковая панель, использующая register_sidebar
и dynamic_sidebar
, и мне нужно, чтобы последний виджет в боковой панели (количество виджетов может быть разным) имел особый класс ('last_widget'
), добавленный к тегу <li>
, который его оборачивает. Как лучше всего это сделать?
Привет, Джон:
Думаю, это то, что ты ищешь (код довольно самодокументируемый, но дай знать, если нужно пояснение):
<?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;
}

Я написал патч, который делает это для основного кода, связанный тикет: #12615 - Добавление CSS-классов "first" и "last" для каждого виджета в сайдбарах (Фронтенд)
Этот патч является рабочим решением. Внутренняя структура виджетов такова, что использование end() для массива сайдбара, как предложил mike в своём коде, не работает корректно (Да, это было бы слишком просто, правда? :P).
Дайте мне знать, если патч не применяется чисто. Я успешно использую его на сайтах с версией 2.9.2.
