2012-05-10 2 views
0

각 ul의 가장 마지막 부분에 클래스를 추가하려고합니다. 그래서 예를 들어 내가있는 경우 : PHP는 기능과이를 달성하는 방법에 대한wp_nav_menu_items를 통해 Wordpress 메뉴에 클래스 추가하기

<ul> 
    <li></li> 
    <li class="last"> 
     <ul> 
     <li></li> 
     <li class="last"></li> 
     </ul> 
    </li> 
</ul> 

어떤 아이디어 :

<ul> 
    <li></li> 
    <li> 
     <ul> 
     <li></li> 
     <li></li> 
     </ul> 
    </li> 
</ul> 

내가이 만들 수있는 필터를 추가하려면? 첫 번째 ul li을 (를) 성공적으로 타겟팅하는 예제를 보았지만 더 깊게 들어 가지 마십시오!

도움을 주시면 감사하겠습니다.

건배

+0

이 작업이 도움이됩니까? http://webknight-nz.blogspot.ca/2009/04/styling-first-and-last-list-items-and.html – anuragbh

답변

0

은 functions.php에 아래 코드를 추가

function add_first_and_last($output) { 
    $output = preg_replace('/class="menu-item/', 'class="first-menu-item menu-item', $output, 1); 
    $output = substr_replace($output, 'class="last-menu-item menu-item', strripos($output, 'class="menu-item'), strlen('class="menu-item')); 
    return $output; 
} 
add_filter('wp_nav_menu', 'add_first_and_last'); 

이 여분의 마크 업이 아니라 두 개 이상의 ID를하는 것보다, 각 요소의 클래스 목록에 추가 할 강제 태그.

나는 더 우아한 해결책이 있어야한다고 생각합니다.

+0

답장 Libin에 감사드립니다. 나는 이것이 중첩 된 목록을위한 마크 업을 추가한다고 생각하지 않는다. 이게 아이 우울을 목표로하는지 확인할 수 있습니까? – BIOS

0

이 질문이 게시 된 지 오래되었지만 중첩 된 목록 항목 문제에 대한 답변도 찾고 있었으며 어디서나 찾을 수 없었습니다 (단 하나 수준 목록에 대한 솔루션). 그래서 나는 이걸 생각해 냈는데, 이것은 효과가있는 것 같지만 다소 어색해 보인다. 그러나 어쨌든 이것을 함수에 추가하십시오.

function add_last_item_class($items) { 
    $ar_index = array(); 
    // loop through all the items and save the index of the last item belonging to a specific parent 
    for ($i = 1; $i <= count($items); $i++): 
    $ar_index[$items[$i]->menu_item_parent] = $i; 
    endfor; 
    // loop through the saved indexes and add the class 'last' to each of them 
    foreach($ar_index as $last_index): 
    $items[$last_index]->classes[] = 'last'; 
    endforeach; 
    return($items); 
} 
add_filter('wp_nav_menu_objects', 'add_last_item_class'); 
관련 문제