目录
首页 笔记 详情

WordPress菜单函数register_nav_menus和wp_nav_menu各参数详解及示例


注册菜单
首先要注册菜单,将以下函数添加至function.php函数里

register_nav_menus(array(
'PrimaryMenu'=>'导航',
'friendlinks'=>'友情链接',
'footer_nav'=>'页脚导航'));
add_theme_support('nav_menus'); 

创建菜单
创建一个名称为“导航栏”的菜单

可以看到主题位置显示了三个位置,即刚才我们添加到function.php的函数里设置的
引用菜单
在主题文件对应位置,引用导航栏。需要用到下面这个函数

wp_nav_menu( array(
    'theme_location'  => '',//导航别名
    'menu'   => '', //期望显示的菜单
    'container'  => 'div',  //容器标签
    'container_class' => '',//ul父节点class值
    'container_id'  => '',  //ul父节点id值
    'menu_class'   => 'menu',   //ul节点class值
    'menu_id'   => '',  //ul节点id值
    'echo'  => true,//是否输出菜单,默认为真
    'fallback_cb' => 'wp_page_menu',  //菜单不存在时,返回默认菜单,设为false则不返回
    'before' => '', //链接前文本
    'after'  => '', //链接后文本
    'link_before'  => '',   //链接文本前
    'link_after'  => '',//链接文本后
    'items_wrap'  => '<ul id="%1$s" class="%2$s">%3$s</ul>',   //如何包装列表
    'depth' => 0,   //菜单深度,默认0
    'walker' => ''  //自定义walker
  ) );

去除或保留菜单多余类名
将以下代码添加至function.php文件即可

add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1);
add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1);
add_filter('page_css_class', 'my_css_attributes_filter', 100, 1);
function my_css_attributes_filter($var) {
return is_array($var) ? array_intersect($var, array('current-menu-item','current-post-ancestor','current-menu-ancestor','current-menu-parent')) : '';
}

构造多级菜单
通过上述例子,很明显默认二级菜单的类名为sub-menu

那么,如果要构造更多级的菜单,以及要修改类名,该怎么办呢?

其实这个可以通过Walker参数来设置

这个参数用于调用一个对象定义显示导航菜单

默认调用的就是Walker_ Nav_Menu这个类

所以我们也可以自己写一个类,来构造多级菜单

class new_walker extends Walker_Nav_Menu
 {
    function start_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("\t", $depth);
        $output .= "\n$indent<ul class=\"child-menu\">\n";
     }
 }

调用

    wp_nav_menu( array( 
    'theme_location'=>'PrimaryMenu', 
    'walker' => new new_walker(),
    'fallback_cb' => '',
    'depth' => 0
    ));
      <?php
      $menuParameters = array(
        'theme_location' => 'topmenu',
        'container'  => false,
        'echo'  => false,
        'items_wrap' => '%3$s',
        'depth'  => 0,
      );
      echo strip_tags(wp_nav_menu($menuParameters), '<a>');
      ?>

 


写笔记

咨询

您的电子邮箱地址不会被公开。 必填项已用*标注