WordPress Walker работает, но не правильно
В прошлом году мне удалось добавить дополнительные элементы в мое меню Wordpress с помощью Walker. ( Как я могу добавить описание родительского меню в мое меню 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, чтобы скрыть все другие экземпляры, которые я не хочу показывать. Но если вы проверите, вы увидите, что контейнер с изображением меню добавляется для каждого подменю в родительских элементах меню.
т. е. внутри "Лица", внутри подменю "Лицо", "Глаз" и "Ухо" есть пункт меню 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 изображения появлялся один раз в самом верху родительского подменю, а остальные просто отображали свои дочерние элементы.
1 ответ
Надеюсь, я правильно понял ваш вопрос. Если вы хотите, чтобы это изображение контейнеры только для одного уровня, то вы можете проверить 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>";
}
}
}
Я не уверен, должна ли $ глубина быть 0 или 1 в вашем случае, попробуйте это.