2012-05-10 17 views
0

私は各ulの最後のliにクラスを追加しようとしています。 SOたとえば私が持っている場合:PHPの機能でこれを達成するためにどのようにワードプレスメニューへのクラスの追加wp_nav_menu_items経由

<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さんありがとうございます。私はこれが入れ子リストのマークアップを追加するとは思わない。これが子供のulをターゲットにしているかどうか確認できますか? – BIOS

0

この質問が投稿されて以来、しばらくしていますが、ネストされたリストアイテムの問題への回答も探していて、どこでも見つけられませんでした(ワンレベルリストの解決策)。だから、私はこれを思いつきました。それはうまくいくようですが、ちょっと不器用だと感じます。しかし、とにかくこれをあなたのfunctions.phpに追加してください:

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'); 
関連する問題