php - 如何在 WordPress 中将 DIV 包裹在子菜单周围 - 仅在第一级?

标签 php html css wordpress menu

我用扩展的 Walker 菜单构建了我的 WordPress 菜单。 我需要环绕 DIV 子菜单的第一级。这已经在工作了。这是我的代码:

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。

谢谢

最佳答案

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

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

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

关于php - 如何在 WordPress 中将 DIV 包裹在子菜单周围 - 仅在第一级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38367458/

相关文章:

html - 如何改变 float 元素的顺序?

css - 标题表单位置问题

CSS - 选择器可访问性

php - 帮助简单查询

php - 预加载对 Laravel 中的模型事件/启动有一些意想不到的副作用

php - 在zend中使用单一表单插入两个表的数据

php - 使用 PHP 将用户名和密码与 HTML 下拉列表匹配

javascript - Apache Cordova Visual Studio 2015 Community 麦克风通讯 App

php - 用mysql将多行插入数据库

javascript - 如何使用父变量的 id 为父的 css 类设置变量?