2011-01-11 1 views
1

В Wordpress я ищу способ добавить «последний» и «первый» класс для отображения элементов внутри виджетов Wordpress. HTML может выглядеть следующим образом:Добавление первого и последнего класса в содержимое виджета Wordpress

<div class="widget-area"> 
<ul > 
    <li class="widget_recent_comments"> 
     <h3 class="widget-title">Recent comments</h3> 
     <ul id="recentcomments"> 
      <li class="recentcomments">Comment 1</li> 
      <li class="recentcomments">Comment 2</li> 
      <li class="recentcomments">Comment 3</li> 
      <li class="recentcomments">Comment 4</li> 
     </ul> 
    </li> 
    <li class="widget_my_links"> 
     <h3 class="widget-title">My links</h3> 
     <ul id="my-links"> 
      <li class="item">Link 1</li> 
      <li class="item">Link 2</li> 
      <li class="item">Link 3</li> 
      <li class="item">Link 4</li> 
      <li class="item">Link 5</li> 
     </ul> 
    </li> 
</ul></div> 

В этом примере выше я хотел бы иметь первые/последние классы добавлены к Ли с «Комментарий 1», «Комментарий 4», «Ссылка 1» и «Ссылка 5" .

Есть ли простой способ обхода? (Я не хочу делать это с помощью javascript)

Спасибо.

+0

Ищите крючки в методах вывода виджетов WordPress. Я уверен, что в конце концов должен быть хотя бы один, прежде чем он выплюнет все. Учитывая ваши требования, это единственный вариант. Действительно хакерский способ - использовать буферизацию вывода для улавливания и повторной обработки вывода. Но с любым решением вам нужно будет подключиться к базовому классу виджета, так как вы хотите обновить все из них. Я настоятельно рекомендую JavaScript-решение, это буквально одна строка jQuery, и она не будет медленной, так как это простая операция обхода и атрибута. – hlfcoding

ответ

0

Я предполагаю, что эти списки генерируются в цикле. Итак, что вы можете сделать, это создать переменную, прежде чем вы перейдете в цикл, и установите для нее значение 1 ($ i = 1). Затем в конце цикла добавьте один вверх ($ i ++). Теперь, когда вы хотите, первый/последний класс появляться, вы можете сделать

<?php if($i == 1): 
    echo ' first'; 
elseif($i == $number_of_items) 
    echo 'last'; 
endif;  
?> 

В $ I == $ NUMBER_OF_ITEMS, вы сравниваете макс с током, так что вы знаете, что последний, если заявление правда.

Надеюсь, это ответит на ваш вопрос.

+0

Фактический цикл (или «цикл» как его вызванный в wordpress) находится в wordpress-коде, поэтому я не смог его изменить. Я больше думал о том, чтобы добавить какой-то фильтр, но надеялся, что есть более легкое решение. – user571188

+0

Нет «цикл» - это файл, который перебирает сообщения и отображает их так или иначе. Виджеты - это отдельные плагины или функции, которые могут быть изменены для перезаписываемых. Вы используете стандартный шаблон Wordpress? Причина в том, что эти списки, вероятно, сгенерированы в sidebar.php, или вызов функции выполняется в sidebar.php. Это нормально редактировать sidebar.php. Если вы вызываете функцию, вы можете, возможно, перезаписать эту функцию в functions.php или скопировать функцию в functions.php, изменить и переименовать ее, и вместо этого вызвать эту функцию, –

+0

No @Jasper, WordPress генерирует такие списки w/o любой доступ к его циклу со стороны пользователя таким образом, который вы имеете в виду. – JakeParis

0

Ну первый элемент легко, просто использовать

ul#my-list li:first-child { 
    /* special styles */ 
} 

Это не добавляет класс, но вы все еще можете стилизовать. Существует не аналогичное правило css для :last-child, к сожалению

+0

Правда. Проблема в том, что мне нужна поддержка IE6, поэтому похоже, что я собираюсь пойти на: first-child и сделать javascript-hack специально для IE6. Спасибо за ваш вклад. – user571188

Смежные вопросы