У меня есть стандартная динамическая боковая панель, использующая 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;
}
Вы также можете использовать CSS для выбора последнего виджета, используя: last-child (хотя IE не хотел бы этого), или использовать jQuery для его выбора. Но приведенный выше код PHP, вероятно, является лучшим способом сделать это.
Я написал патч, который делает это для основного кода, связанный тикет # 12615 - Добавьте "первый" и "последний" имена CSS-классов к каждому виджету в боковых панелях (Frontend)
patch - это рабочее решение, есть некоторые внутренние компоненты виджетов, которые используют end () в массиве боковой панели, поскольку Майк предполагает, что его код не работает должным образом (да, это было бы слишком просто, верно: P) ,.
Дайте мне знать, если патч больше не применяется. У меня это работает очень хорошо на 2.9.2 сайтах.