0

独自のクラスをWordpressメニューに追加する方法、またはサブメニューの親liに到達する方法はすでに知っています:

function my_nav_special_class($classes, $item){
    if(in_array('current-menu-ancestor', $classes)){
        $classes[] = 'my_class';
    }
    return $classes;
}
add_filter('nav_menu_css_class' , 'my_nav_special_class' , 10 , 2);

しかし、サブメニューのアイテムのみをターゲットにする方法がわかりません。このクラスがアイテムタイトルのスラッグ名であれば良いのですが、単純なクラスでも良いでしょう...

4

1 に答える 1

1

そのためにはWalker_Nav_Menuを使用する必要があります。これは、すべてのメニュー項目をトラバースするためのものです。

$depth - アイテムの現在のレベル (最初のレベルを 0 としてカウントします)

$item - アイテムのすべてのデータを保持するオブジェクト

// header.php
wp_nav_menu( array( 'theme_location' => 'primary', 'walker' => new my_walker_nav_menu() ) );

// functions.php
class my_walker_nav_menu extends Walker_Nav_Menu {
    function start_el( &$output, $item, $depth, $args ) {
        if ( $depth == 1 ) {
            $item->classes[] = 'my_class';
        }
        parent::start_el($output, $item, $depth, $args);  
    }
}

上記の例ではmy_class、すべてのサブメニュー li アイテムに追加されますが、この方法で必要なものを変更できます。

于 2013-05-23T23:28:35.307 に答える