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 в вашем случае, попробуйте это.

Другие вопросы по тегам