【问题标题】:How can I wrap a DIV around Sub-Menu in WordPress - only in First-Level?如何在 WordPress 中围绕子菜单包装 DIV - 仅在一级?
【发布时间】:2016-11-16 23:20:44
【问题描述】:

我使用扩展的 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)

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

谢谢

【问题讨论】:

    标签: php html css wordpress menu


    【解决方案1】:

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

    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 不是您需要的,只需更改您要检查的数字。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-05
      • 2018-10-07
      • 2016-02-26
      • 2013-03-03
      • 2013-02-23
      • 1970-01-01
      相关资源
      最近更新 更多