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,试试吧。
去年,我设法使用助行器将其他元素添加到我的 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,试试吧。