0

最初の navbar-dropdown を保持し、その後のすべてのレベルを削除するための最良の方法は何ですか? そのため、メイン メニューのホバーを維持したいのですnavbar-dropdownが、すべてのサブメニューを一覧表示するだけにします。

またhas-dropdown is-hoverable、メイン メニュー レベルのみをオンにして、すべてのサブメニューから削除したいと考えています。

詳細の画像:
ここに画像の説明を入力

現在の Navwalker の外観は次のとおりです。

class Navwalker extends Walker_Nav_Menu {

    public function start_lvl( &$output, $depth = 0, $args = array() ) {

        $output .= "<div class='navbar-dropdown'>";
    }

    public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {

        // Add your custom item classes here

        $custom_classes_from_menu = implode(' ', $item->classes); // turn the WP classes object array to string values

        $liClasses = 'navbar-item ' . $custom_classes_from_menu; // add the values to your classes list

        $hasChildren = $args->walker->has_children;
        $liClasses .= $hasChildren? " has-dropdown is-hoverable": "";

        if($hasChildren){
            $output .= "<div class='".$liClasses."'>";
            $output .= "\n<a class='navbar-link' href='".$item->url."'>".$item->title."</a>";
        }
        else {
            $output .= "<a class='".$liClasses."' href='".$item->url."'>".$item->title;
        }

        // Adds has_children class to the item so end_el can determine if the current element has children
        if ( $hasChildren ) {
            $item->classes[] = 'has_children';
        }
    }

    public function end_el(&$output, $item, $depth = 0, $args = array(), $id = 0 ){

        if(in_array("has_children", $item->classes)) {

            $output .= "</div>";
        }
        $output .= "</a>";
    }

    public function end_lvl (&$output, $depth = 0, $args = array()) {

        $output .= "</div>";
    }
}
4

0 に答える 0