在同一页面上创建和使用多个Walker_Nav_Menu

时间:2018-08-07 02:59:44

标签: php wordpress

我的WordPress主题带有一个walker_Nav_menu。我试图创建多个Walker_Nav_menu,所以我复制了它:

class atsnav_menu_1 extends Walker_Nav_menu {
 // code....
}

class ats_nav_menu_2 extends Walker_Nav_menu {
 // code....
}

然后在header.php文件中,我使用以下代码在不同部分显示菜单。

<?php
  wp_nav_menu( array(
    'theme_location'        => 'navbar',
    'container'             => false,
    'menu_class'            => '',
    'fallback_cb'           => '__return_false',
    'items_wrap'            => '<ul id="%1$s" class="darkmenu">%3$s</ul>',
    'depth'                 => 2,
    'walker'                => new ats_nav_menu_1()
  ) );
?>

<?php
  wp_nav_menu( array(
    'theme_location'        => 'navbar',
    'container'             => false,
    'menu_class'            => '',
    'fallback_cb'           => '__return_false',
    'items_wrap'            => '<ul id="%1$s" class="sidemenu">%3$s</ul>',
    'depth'                 => 2,
    'walker'                => new ats_nav_menu_2()
  ) );
?>

但这仅在我仅使用两种之一时有效-ats_nav_menu_1或ats_nav_menu_2。如果我同时添加了它们,那么它们都不起作用。 是否可以在WordPress中做到这一点,或者我在这里错过了什么?请告诉我。

我的目标是在同一页面上以垂直和水平显示相同的菜单,并在级别和其他方面进行不同的自定义。

1 个答案:

答案 0 :(得分:0)

我找到了答案。代码缺少菜单ID参数'menu_id' => '',我将其添加到其中一个,如下所示:

<?php
  wp_nav_menu( array(
    'theme_location'        => 'navbar',
    'container'             => false,
    'menu_id'               => 'mobilenav',
    'menu_class'            => '',
    'fallback_cb'           => '__return_false',
    'items_wrap'            => '<ul id="%1$s" class="sidemenu">%3$s</ul>',
    'depth'                 => 2,
    'walker'                => new ats_nav_menu_2()
  ) );
?>

解决了。