WordPress导航菜单,可以把需要的页面(首页,分类,页面)添加到导航中,非常灵活。有了它,就不再需要?wp_list_categories?函数。因为使用它需要哪些分类,不需要哪些分类,分类的排序,仅仅需要在后台动动鼠标即可,根本不需要去动用模板。

基本用法

<?php?wp_nav_menu(?$args?);??>

默认参数

<?php$defaults = array(
"theme_location"  => "",
"menu"            => "",
"container"       => "div",
"container_class" => "",
"container_id"    => "",
"menu_class"      => "menu",
"menu_id"         => "",
"echo"            => true,
"fallback_cb"     => "wp_page_menu",
"before"          => "",
"after"           => "",
"link_before"     => "",
"link_after"      => "",
"items_wrap"      => "<ul id="%1$s">%3$s</ul>",
"depth"           => 0,
"walker"          => ""
);wp_nav_menu( $defaults );?>

参数说明

$theme_location

(string) (optional)在主题中使用的位置,为了用户选择必须用??register_nav_menu() 函数注册

Default: None

$menu

(string) (optional)按需要,指定ID、别名、名称的菜单

Default: None

$container

(string) (optional)项目列表ul的父元素,不想使用可以用?’container’ => false

Default: div

$container_class

(string) (optional) 外围元素,即项目列表ul的父元素的类别名称

Default: menu-{menu slug}-container

$container_id

(string) (optional) 外围元素的ID

Default: None

$menu_class

(string) (optional)项目列表ul的类别名称。

Default: menu

$menu_id

(string) (optional)项目列表ul的ID名称。

Default: menu-{menu slug}; when there are duplicates, the next values are menu-{menu slug}-1, menu-{menu slug}-2, etc.

$echo

(boolean) (optional) 是否输出菜单或返回它,返回菜单值为0

Default: true

$fallback_cb

(string) (optional) 如果菜单不存在,则会使用fallback函数。设置为假,没有返回。注意:通过自定义函数的参数。

Default: wp_page_menu

$before

(string) (optional) 在a标签之前输出的文本

Default: None

$after

(string) (optional)?在a标签之后输出的文本

Default: None

$link_before

(string) (optional) 在a标签里面的文字前面输出的文本

Default: None

$link_after

(string) (optional)?在a标签里面的文字后面输出的文本

Default: None

$items_wrap

(string) (optional)格式字符串参数的一个sprintf()表达式。格式字符串包含了其他的参数编号标记。%1$s扩展到了参数menu_id的值;%2$s扩展到了参数menu_class的值;%3$s则扩展到列表项的值。如果一个编号的令牌省略了格式字符串,相关的参数也会被省略。

Default:%3$s

$depth

(integer) (optional)多少个级别的层次,0显示所有,-1在一个单一的平面列表显示任何层次的链接

Default: 0

$walker

(object) (optional)自定义walker对象,(注意:你必须通过一个实际的对象来使用,而不是一个字符串)

Default: new Walker_Nav_Menu

详细用法

要使用 WordPress 导航菜单功能,首先要给当前的主题注册导航菜单,从上面我们知道,我们可以注册一个或者多个导航菜单的主题位置,我么可以使用下面两个函数:

  1. register_nav_menu():注册一个主题位置。
  2. register_nav_menus():注册多个主题位置(使用数组形式)。

注册主题位置

这里我们只注册一个导航菜单的主题位置,在functions.php文件中加入以下代码

/*注册导航菜单*/
register_nav_menu( "nav-menu", "导航菜单");

nav-menu 是这个导航菜单的名字,用来在函数中定义身份的,而“导航菜单”则是名称,在 WordPress 后台使用的时候可见。

进入wordpress后台,“外观——菜单”,之后就可以用鼠标创建导航菜单了,创建完毕记得保存,OK

前台调用

<?php wp_nav_menu(array( "theme_location"=>"nav-menu","container" => "","items_wrap" => "<ul>%3$s</ul>")); ?>

主题位置为 nav-menu(在functions.php文件中用register_nav_menu() 函数注册的名字)

ul外面不用父元素,ul元素不带任何参数。

不过即使如此,每个li项后还是有很多参数,可以用 add_filter 来过滤 。以下是我整理好的,仅作参考

function replace_nav($content){
$patterns[0] = "/ id="menu-item-\d+"/";
$patterns[1] = "/ class="menu-item menu-item-type-[^\s]+ menu-item-object-[^\s]+( menu-item-home)? menu-item-\d+"/";
$ct[0]="/menu-item menu-item-type-[^\s]+ menu-item-object-[^\s]+ current[^"]+/";
$content = preg_replace($patterns, "", $content);
$content = preg_replace($ct,"current", $content);
return ($content);
}
add_filter("wp_nav_menu","replace_nav");