如何在WordPress中修改Bootstrap导航下拉切换的默认链接(WP_Bootstrap_Navwalker)
嘿,这个问题我之前帮好几个开发者踩过坑!WP_Bootstrap_Navwalker默认会把带有子菜单的父项href强制设为#,只用来展开子菜单,没法跳转到父页面对应的URL。下面给你两种靠谱的解决方法,推荐用第一种(更安全,不影响后续更新):
方法一:使用WordPress过滤器钩子(推荐)
不用修改任何核心插件或主题文件,直接把这段代码加到你当前主题的functions.php文件里,或者自定义插件中:
add_filter('nav_menu_link_attributes', 'custom_parent_menu_href', 10, 3); function custom_parent_menu_href($atts, $item, $args) { // 检测当前是否使用WP_Bootstrap_Navwalker,且菜单项包含子菜单 if (isset($args->walker) && is_a($args->walker, 'WP_Bootstrap_Navwalker') && in_array('menu-item-has-children', $item->classes)) { // 将href替换为菜单项本身设置的URL,而不是默认的# $atts['href'] = !empty($item->url) ? $item->url : '#'; } return $atts; }
额外注意:
如果修改后点击父菜单直接跳转,没法展开子菜单,那是因为原来的下拉触发逻辑绑定在了父链接上。你需要确保子菜单的展开是通过下拉箭头按钮触发的:
- 检查你的WP_Bootstrap_Navwalker版本,确保它会为有子菜单的父项生成单独的下拉按钮(带有
data-toggle="dropdown"属性) - 如果没有这个按钮,可能需要更新Walker类,或者手动调整JS,让下拉事件只绑定在箭头按钮上,而不是整个父链接。
方法二:自定义修改WP_Bootstrap_Navwalker类(不推荐直接改原文件)
如果你一定要修改Walker的核心逻辑,不要直接修改插件里的原文件(下次插件更新会覆盖你的修改),正确的做法是:
- 把
wp-bootstrap-navwalker.php文件复制一份到你的主题目录下 - 重命名这个文件,比如
custom-wp-bootstrap-navwalker.php - 修改文件里的类名,比如改成
Custom_WP_Bootstrap_Navwalker - 找到类中设置父菜单href为
#的代码段(通常在start_el方法里),把:
替换成:$atts['href'] = '#';$atts['href'] = !empty($item->url) ? $item->url : '#'; - 在你的主题
functions.php里引入这个自定义的Walker类,然后在注册导航菜单时使用它。
这样修改后,父菜单的href就会使用你在WordPress后台菜单设置里填写的URL了,点击既可以跳转到对应页面,同时子菜单的展开功能也能正常工作(前提是下拉触发逻辑是绑定在箭头按钮上)。
内容的提问来源于stack exchange,提问作者ivan saron
相关产品推荐
相关产品推荐

