web-dev-qa-db-ja.com

Walker navが特定の深さからサブメニューulを削除

メニューの深さが2以上の場合は、sub-menu ulと.menu-item-has-childrenクラスを削除したいです。

だから、私は最大3サブメニューのメニューが欲しいだけです。他の項目の子はメニューに表示されますが、サブメニューには表示されません。

Wp_nav_menu( 'depth' => 3)では、すべての項目を追加しません。だから、私はカスタムウォーカーナビゲーションを使用する必要があると思います。

start_lvlでそれをする方法がわかりません。深さを数え、ulとクラスを削除する方法は何ですか?.

私の目的は、このメニューを変更することです。

  • menu-item-has-children
    • メニュー項目-1
    • メニュー項目2
    • menu-item-has-children
      • メニュー項目3
      • メニュー項目4
      • menu-item-has-children
        • メニュー項目5
        • メニュー項目6

このメニューへ:

  • menu-item-has-children
    • メニュー項目-1
    • メニュー項目2
    • menu-item-has-children
      • メニュー項目3
      • メニュー項目4
      • menu-item-has-children
      • メニュー項目5
      • メニュー項目6

そして、ワードプレスのwp_nav_menu( 'depth' => 3)オプションによって、望ましくない振る舞いが提供されます。

  • menu-item-has-children
    • メニュー項目-1
    • メニュー項目2
    • menu-item-has-children
      • メニュー項目3
      • メニュー項目4
      • menu-item-has-children

私はこれを試してみました:

function start_lvl(&$output, $depth) { 
    if($depth >= 2) {
        $output .=  '';
    } else {
        $output .= "<ul class='sub-menu'>";
    }
}

それは近くうまくいくが、それは私のnavmenuの中のulに関する問題を引き起こす。

1
freaky

一見したところ、何もテストしなくても、得られたコードは機能するはずですが、マークアップにはいくつかの偽の</ul>があると思います。 end_lvlメソッドについてもほぼ同じことをする必要があります。

function end_lvl(&$output, $depth) { 
    if($depth >= 2) {
        $output .=  '';
    } else {
        $output .= "</ul>";
    }
}

それがあなたのmegamenuの問題なのかどうか私は知りません。

3
s_ha_dum