如何在WordPress中的子菜单周围包装DIV - 仅限于第一级?

时间:2016-07-14 06:57:26

标签: php html css wordpress menu

我使用Extended Walker菜单构建了我的WordPress菜单。 我需要在DIV Wrapped的子菜单的第一级附近。这已经有效了。这是我的代码:

class SH_Child_Only_Walker extends Walker_Nav_Menu {

     function start_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("\t", $depth);
        $output .= "\n$indent<div class=\"submenu\"><ul class=\"sub-menu\">\n";
    }

     function end_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("\t", $depth);
        $output .= "$indent</ul>\n<span class=\"subtoggle\"></span></div>\n";
    }

但是在这里我得到了这个DIV包裹在每个子菜单周围,也在更深层次。

我需要这样:

第一级:主菜单

第二级:子菜单(带DIV)

第三级:子菜单(不含DIV)

如何使用Extended Walker菜单实现此目的。我不想使用jQuery或任何JavaScript。

由于

1 个答案:

答案 0 :(得分:0)

当我遇到这个问题时,我今天自己也在想这个问题。在进行自己的编码之前,我倾向于寻找快速解决方案,但在考虑了一下之后,它就是一个简单的解决方案。

class SH_Child_Only_Walker extends Walker_Nav_Menu {

 function start_lvl( &$output, $depth = 0, $args = array() ) {
    $indent = str_repeat("\t", $depth);
    if($depth == 0){
        $output .= "\n$indent<div class=\"submenu\"><ul class=\"sub-menu\">\n";
    }else{
        $output .= "\n$indent<ul class=\"sub-menu\">\n";   
    }
}

 function end_lvl( &$output, $depth = 0, $args = array() ) {
    $indent = str_repeat("\t", $depth);
    if($depth == 0){
        $output .= "$indent</ul>\n<span class=\"subtoggle\"></span></div>\n";
    }else{
        $output .= "$indent</ul>\n\n";
    }
}

$ depth是您所处的级别,它是零索引,所以它从0开始。如果$ depth 0不是您需要的,只需更改您的数字&#39;重新检查。

我的例子可能不是你需要的确切标记,但希望这说明了如何去做。