Wordpress walker 正在运行,但不正确

Wordpress walker is working, but not correctly

去年,我设法使用助行器将其他元素添加到我的 Wordpress 菜单中。 ()

目前,我的函数文件中的助行器看起来像这样:

// Submenu walker to add image
class submenu_walker extends Walker_Nav_Menu {
    function start_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("\t", $depth);
        global $description;
        $output .= "<ul class='sub-menu'><li class='menu-image-container'><div class='menu-image'></div><div class='menu-description'>".$description."</div></li>";
    }
    function end_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("\t", $depth);
        $output .= "<li><div class='clear'></div></li></ul>";
    }
}

本质上,我想做的是为网站上的每个一级子菜单添加图片和简短描述:www.bellavou.co.uk

如果您访问该站点,您会发现它看起来不错,因为我已经使用 CSS 隐藏了所有我不想显示的其他实例。但是,如果您检查一下,您会看到为父菜单项中的每个子菜单添加了一个菜单图像容器。

即在 'Face' 中,'Face'、'Eye' 和 'Ear' 子菜单中有一个菜单项 div,以及显示在主子菜单中的菜单项-菜单。

我只想显示主要部分,我认为这是通过更改深度设置来实现的,但我已经尝试过,但没有进行任何更改。

如何才能在顶级父级子菜单中只创建一次新子菜单?

更新并解决:

事实证明,就应用规则的深度而言,我的思路是正确的。但是没想到我现有的子菜单。

// Submenu walker to add image
class submenu_walker extends Walker_Nav_Menu {
    function start_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("\t", $depth);
        if(0 == $depth) {
            global $description;
            $output .= "<ul class='sub-menu'><li class='menu-image-container'><div class='menu-image'></div><div class='menu-description'>".$description."</div></li>";
        } else {
            $output .= "<ul class='sub-menu'>";
        }
    }
    function end_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("\t", $depth);
        if(0 == $depth) {
            $output .= "<li><div class='clear'></div></li></ul>";
        } else {
            $output .= "</ul>";
        }
    }
}

现在已解决此问题,只有图像 div 出现在父级子菜单的最顶部,而其他图像只显示它们的子项。

希望我已经正确理解了你的问题。如果你希望这个图像容器只用于一层,那么你可以检查 if ( $depth == $desired_level)

// Submenu walker to add image
class submenu_walker extends Walker_Nav_Menu {
    function start_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("\t", $depth);
        if ( $depth == 0 ) {
            global $description;
            $output .= "<ul class='sub-menu'><li class='menu-image-container'><div class='menu-image'></div><div class='menu-description'>".$description."</div></li>";
        } else {
           $output .= "<ul class='sub-menu'>";
        }

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

我不确定在你的情况下 $depth 应该是 0 还是 1,试试吧。