【问题标题】:How to filter the sub-menu classname in WordPress navigation menus?如何过滤 WordPress 导航菜单中的子菜单类名?
【发布时间】:2014-08-12 00:17:16
【问题描述】:

在 WordPress 中,当使用导航菜单时,二级菜单被赋予类 sub-menu。例如:

<ul>
    <li>
        <a title="Page 1" href="/page-1/">Page 1</a>
        <ul class="sub-menu">
            <li>
                <a title="Sub page 1" href="/sub-page-1/">Sub page 1</a>
            </li>
            <li>
                <a title="Sub page 2" href="/sub-page-2/">Sub page 2</a>
            </li>
        </ul>
    </li>
</ul>

我正在使用Bootstrap 3,因此需要将该类名设为dropdown-menu。到目前为止,我的尝试是将所有 dropdown-menu 类从 bootstrap.css 复制到我的主题 style.css 中,并将它们的名称更改为 sub-menu。这不是一个好方法,因为当我下次升级 Bootstrap 时,我需要检查是否有任何变化。

我的下一个想法是过滤类名。 WordPress 是否提供了一个过滤器,可以让我更改这个类名?

更新

我找到了一个walker 解决方案here,它可以让我更改sub-menu 类。

class My_Walker_Nav_Menu extends Walker_Nav_Menu {
  function start_lvl(&$output, $depth) {
    $indent = str_repeat("\t", $depth);
    $output .= "\n$indent<ul class=\"my-sub-menu\">\n";
  }
}

我将其直接粘贴到我的主题的functions.php 中。这允许我更改类名,但我现在的问题是我收到以下 PHP 调试通知:

严格标准:My_Walker_Nav_Menu::start_lvl() 的声明 应该与 Walker_Nav_Menu::start_lvl(&$output, $depth = 0,$args = 数组)在 /wp-content/themes/my-theme/functions.php 在第 224 行

我应该将walker 直接粘贴到我的主题的functions.php 中吗?我哪里错了?

【问题讨论】:

  • 这个需要使用walker...
  • 为什么需要助行器?
  • 如果你想改变 sub_menu 类...我认为 wp 中没有任何功能可以改变这个类。仅用于 wp 菜单中的自定义
  • 在搜索 walker 解决方案后,我找到了这个解决方案,但不完全确定如何使用它:stackoverflow.com/a/5048792/1709033 - 有什么想法吗?它直接进入我主题的functions.php吗?
  • 我更喜欢非 jQuery 解决方案。我在上面链接到的助行器看起来很有前途,我只是不知道如何使用它。

标签: php css wordpress twitter-bootstrap


【解决方案1】:

你为什么不做相反的事情?编辑主题文件,而不是编辑 CSS。您可以更改 ul 的类。

<ul class="dropdown-menu">
   ...
</ul>

如果您出于任何原因需要在 ul 中保留“子菜单”类,您也可以在同一个元素中使用两者。只需在 ul 中添加“bootstrap.css”类即可。

<ul class="sub-menu dropdown-menu">
   ...
</ul>

【讨论】:

  • 我认为在使用 WordPress 导航菜单时这是不可能的?
【解决方案2】:

您需要在 functions.php 中包含您的 walker 文件并更改您的 wp_nav_menu 函数以像这样调用 walker...

wp_nav_menu( array(
    'menu'              => 'Main Navigation',
    'theme_location'    => 'main_navigation',
    'depth'             => 0,
    'container'         => 'div',
    'container_class'   => 'collapse navbar-collapse',
    'container_id'      => 'bs-example-navbar-collapse-1',
    'menu_class'        => 'nav navbar-nav',
    'fallback_cb'       => 'wp_bootstrap_navwalker::fallback',
    'walker'            => new wp_bootstrap_navwalker())
);

【讨论】:

  • 您的 walker 函数中的函数 start_lvl 与其父类 Walker_Nav_Menu 不兼容...所以请在此处发布您的函数 start_lvl..
  • 我的start_lvl 函数在我的My_Walker_Nav_Menu class 中。实际上调试通知的解决方案也在那个页面上。见here
猜你喜欢
  • 2014-02-16
  • 2019-09-08
  • 2013-09-26
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
相关资源
最近更新 更多