You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress中修改Bootstrap导航下拉切换的默认链接(WP_Bootstrap_Navwalker)

解决WP_Bootstrap_Navwalker父菜单href为#无法跳转的问题

嘿,这个问题我之前帮好几个开发者踩过坑!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的核心逻辑,不要直接修改插件里的原文件(下次插件更新会覆盖你的修改),正确的做法是:

  1. 把wp-bootstrap-navwalker.php文件复制一份到你的主题目录下
  2. 重命名这个文件,比如custom-wp-bootstrap-navwalker.php
  3. 修改文件里的类名,比如改成Custom_WP_Bootstrap_Navwalker
  4. 找到类中设置父菜单href为#的代码段(通常在start_el方法里),把:
    $atts['href'] = '#';
    
    替换成:
    $atts['href'] = !empty($item->url) ? $item->url : '#';
    
  5. 在你的主题functions.php里引入这个自定义的Walker类,然后在注册导航菜单时使用它。

这样修改后,父菜单的href就会使用你在WordPress后台菜单设置里填写的URL了,点击既可以跳转到对应页面,同时子菜单的展开功能也能正常工作(前提是下拉触发逻辑是绑定在箭头按钮上)。

内容的提问来源于stack exchange,提问作者ivan saron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:47:37