wp_nav_menu walker 类子菜单仅显示在父页面上
Posted
技术标签:
【中文标题】wp_nav_menu walker 类子菜单仅显示在父页面上【英文标题】:wp_nav_menu walker class submenu display only on parent page 【发布时间】:2011-12-28 17:46:05 【问题描述】:我已搜索并找不到自定义“Walker”类,该类将隐藏 wp_nav_menu 中的子菜单,直到您位于父页面上。我找到了很多隐藏它们或仅显示子菜单的方法,但不是仅在您处于该部分时才显示子菜单的方法。下面是我需要它如何显示的示例:
当前的 Wp_nav_menu 结构:
父 1 父 2 孩子 1 孩子 2 父 3 孩子A 孩子B-显示-
在父 1/主页上:
父 1 父 2 父 3在 Parent 2 和 Parent 2 子页面上:
父 1 父 2 孩子 1 孩子 2 父 3【问题讨论】:
您可能会在 wordpress.stackexchange.com 上获得更好的答案,您希望我们为您迁移吗? 【参考方案1】:您不需要自定义 walker 来执行此操作,可以使用 CSS 类和 display:none 来完成;
例如你可以从:
.menu .sub-menu display: none;
.menu .current-menu-item .sub-menu display:block;
.menu .current-menu-ancestor .sub-menu display:block;
通过一些额外的规则,基于应用于 body 标签的类,您可以有条件地显示和隐藏其他菜单项,使用通过后端添加到菜单项的类。
【讨论】:
非常感谢 - 我真的看不到树木的树木。【参考方案2】:在我看来,使用 CSS 来“隐藏”不需要的菜单级别充其量是繁琐的,最坏的情况是有点“hacky”。就我个人而言,我从不喜欢向页面输出不应该存在的任何内容(无论如何都可以避免)。
Wordpress 目前对我们没有任何帮助,因为它们没有提供内置于 wp_nav_menu 的选项来限制菜单的起始深度。
我尝试了不同的walker、小部件和插件来解决这个问题,但我对我尝试过的解决方案从来都不是很满意。例如,上面插件中的解决方案要求您传递所需子菜单的 ID。
我已经编写了自己的插件,它扩展了 wp_nav_menu 以添加“start_depth”选项。这会自动在任何子页面上运行,无需指定任何内容。
安装插件后使用这样的代码即可:
wp_nav_plus(array('theme_location' => 'primary_navigation', 'start_depth' => 1));
任何有兴趣的人都可以在我的网站上找到它:https://mattkeys.me/products/wp-nav-plus/
【讨论】:
【参考方案3】:上面的答案是正确的——你可以用 css 做到这一点,但菜单在技术上仍然“存在”。如果你想完全消除 - 你可以使用我写的插件 - here。
请评价并确认它有效 - 我几天前刚刚发布了它。我已经在几个网站上使用过它。我的第一个插件:)
【讨论】:
插件效果很好!如果它能够弄清楚它在菜单树本身的位置会很好 - 目前你可以通过它 $post->post_parent 来获得正确的子菜单,但这有问题:如果你的页面结构不同于你的菜单结构,你会得到错误的子菜单显示。不过,有用的开始非常感谢!以上是关于wp_nav_menu walker 类子菜单仅显示在父页面上的主要内容,如果未能解决你的问题,请参考以下文章
如何在函数中定位特定的 wordpress 菜单(wp_nav_menu)?