web-dev-qa-db-ja.com

カスタムナビゲーションウォーカーの `start_el`深度引数は常にゼロに評価されます

私はメニューの最初のレベルのみを出力するために使用しようとしているカスタムナビゲーションウォーカーを持っています。

<?php wp_nav_menu( array(
    'theme_location' => 'secondary-menu',
    'depth' => 1,
    'walker' => new SecondaryNavWalker
) ); ?>

ただし、ナビゲーションのすべてのレベルは関係なく出力されます。 start_elのargに対してチェックを試みましたが、ページに親がある場合でも、渡されるdepth引数は常にゼロです。何が足りないの?

これがフルカスタムナビゲーションウォーカーです。

class SecondaryNavWalker extends Walker_Nav_Menu
{
    function start_el(&$output, $item, $depth, $args)
    {
        //var_dump($item);
        //var_dump('Args');
        //var_dump($args);

        //var_dump('depth comp');
        //var_dump($depth);
        //var_dump($args['depth']);

        if (get_post_meta( $item->ID, 'saltIsInMainNav', true ) || $depth > $args['depth']) {
            return;
        }

        $classes     = empty ( $item->classes ) ? array () : (array) $item->classes;

        $class_names = join(
            ' '
            ,   apply_filters(
                'nav_menu_css_class'
                ,   array_filter( $classes ), $item
            )
        );

        ! empty ( $class_names )
        and $class_names = ' class="'. esc_attr( $class_names ) . '"';

        $output .= "<li id='menu-item-$item->ID' $class_names>";

        $attributes  = '';

        ! empty( $item->post_title )
        and $attributes .= ' title="'  . esc_attr( $item->post_title ) .'"';
        ! empty( $item->guid )
        and $attributes .= ' href="' . esc_url( site_url('/?p='.$item->ID) ) .'"';

        $title = apply_filters( 'the_title', $item->post_title, $item->ID );

        $item_output = $args->before
            . "<a $attributes>"
            . $args->link_before
            . "$title"
            . $args->link_after
            . '</a> '
            . $args->after;

        // Since $output is called by reference we don't need to return anything.
        $output .= apply_filters(
            'walker_nav_menu_start_el'
            ,   $item_output
            ,   $item
            ,   $depth
            ,   $args
        );
    }
}

コメントがない場合、それらのdepth var_dumpsはこれを出力します。

string(10) "depth comp" int(0) int(1) 
string(10) "depth comp" int(0) int(1) 
string(10) "depth comp" int(0) int(1) 
string(10) "depth comp" int(0) int(1) 
string(10) "depth comp" int(0) int(1) 
string(10) "depth comp" int(0) int(1) 
string(10) "depth comp" int(0) int(1) 
string(10) "depth comp" int(0) int(1) 
string(10) "depth comp" int(0) int(1) 
string(10) "depth comp" int(0) int(1) 
string(10) "depth comp" int(0) int(1) 
string(10) "depth comp" int(0) int(1)

編集:チャットルームの@Howdy_McGeeは このコード を送ってきたので、彼はstart_elメソッドのdepth argをうまく使いました。それが参照する多くの属性( - > classes、 - > attr_title、 - > target、 - > xfn、 - > url)は私が手に入れているWP_Postオブジェクトに含まれていないので、このコードは私にはうまくいきません。これはどうやってできるの?

EDIT 2:これは@Howdy_McGeeを使ったコンボのトランスクリプト で、問題を絞り込んで解決策を見つけることができません。

2
Nathan Arthur

引数'depth' => 1,--を渡しているので、ウォーカーはメニューの最初のレイヤーだけを引っ張るので、奥行きは常に同じ値になります。あなたはそれを一つだけレベルを上げるように言った。

1
s_ha_dum