在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解决方案,它可以让我改变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 = Array)在/wp-content/themes/my-theme/functions.php中第224行
我应该粘贴步行者直接到我的主题的函数。php?我哪里做错了?
你为什么不相反呢?而不是编辑CSS,编辑主题文件。你可以直接改变ul的类。
<ul class="dropdown-menu">
...
</ul>
如果你出于任何原因需要在ul中保留"sub-menu"类,你也可以在同一个元素中同时使用这两个类。只需将"bootstrap.css"类添加到ul中。
<ul class="sub-menu dropdown-menu">
...
</ul>
您需要在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())
);