WordPress 3.0引入了导航菜单功能,使得页面的导航和链接的管理变得简单易用。WP为用户提供菜单管理页面和各种调用方式。我们先来看看WordPress的导航菜单的功能。
管理菜单页面。
第:页外观菜单从界面来看,可以创建多个菜单,并且可以在菜单中添加自定义链接、页面链接和类别链接。
但是需要注意的是,如果添加了页面链接和类别链接,那么只有链接而不是页面和类别本身会被带入菜单,也就是说,子页面和子类别不会成为菜单的一部分。
此外,我们不能在菜单中添加其他菜单,所以这种自定义菜单注定只存在于一个级别。在右边排列的菜单块中,只要一个菜单向右移动一格,就可以作为下级菜单使用。因此,可以创建多个级别。创建菜单后,我们可以通过Widgets页面将这些菜单添加到边栏中。
注册自定义菜单。
在菜单管理页面,注意主题位置块提示如下:
当前主题本身不支持菜单,但是您可以使用“自定义菜单”小部件将您在此创建的任何菜单添加到主题的边栏中。这意味着您的主题现在不支持自定义菜单,但是您可以通过小部件向主题的边栏添加自定义。主题怎么还能支持自定义菜单?请将以下代码添加到function.php。
register _ nav _ menus(数组(' Primary '=' Primary Navigation '));此代码用于记录自定义菜单,您可以为其选择特定的应用程序菜单,其中主菜单应为唯一标识符,主导航为菜单名称。您可以通过此功能为主题添加多个自定义菜单。如果在function.php加注册,方法如下:
register _ nav _ menus(数组(' Primary '=' Primary Navigation '));register _ nav _ menus(数组('次要'='次要导航'));register _ nav _ menus(数组('底部'='底部导航'));在菜单管理页面,您将看到下图。
调用主题菜单
如何在一个主题中调用菜单?在主题的适当位置使用wp_nav_menu()方法;并将菜单输出到页面。方法中提供了参数theme_location来指定相应的自定义菜单。如果要调用第一个菜单,代码如下:
wp_nav_menu(数组(' theme _ location '=' primary '));默认情况下,如果没有定义菜单,使用wp_nav_menu方法与wp_list_pages方法相同,但效率低于后者。因此,如果您计划使用页面列表或分类列表作为导航菜单,建议不要使用wp_nav_menu。
使用
调用主题中的导航菜单非常简单。只需添加以下语句来输出页面上的菜单。
?PHP WP _ nav _ menu();但实际上,这种方法提供了很多可配置的参数,下面我们将一一描述。
参数
参数列表来自WordPress Codex。下面一个一个翻译,详细解释不容易理解的参数。
$menu (string)(可选)要显示的菜单;接受id、slug、name(顺序匹配):无的默认值。
我们来看看WordPress的菜单检索方法。就像Codex上的描述一样,按照ID、slug和name的顺序进行检索。
函数WP _ get _ nav _ menu _ object($ menu){//没有提供参数,一个空的if(!$menu)返回false//根据id查找$ menu _ obj=get _ term ($ menu,' nav _ menu ');//如果slug找不到,就找if(!$menu _ obj)$ menu _ obj=get _ term _ by(' slug ',$ menu,' nav _ menu ');//如果还是名字找不到,就找if(!$menu _ obj)$ menu _ obj=get _ term _ by(' name ',$ menu,' nav _ menu ');//最后没找到。空if(!$ menu _ obj)$ menu _ obj=false;返回$ menu _ obj}$container (string)(可选)ul父节点的标签类型默认值为: div。
永远不要认为任何标签都可以使用。事实上,只会使用div和nav。如果输入其他值,将不会显示ul父节点的标签,这表明Codex的描述不够详细。(从另一个角度来看,WordPress使用导航标签来表明它正在改善对HTML5的支持。).
//唯一允许的标签是div和nav $ allowed _ tags=apply _ filters(' WP _ nav _ menu _ container _ allowed tags ',array ('div ',' nav '));$container_class (string)(可选)ul父节点的类属性值默认值为: menu-{menu slug}-container。
$container_id(字符串)(可选)ul父节点的id属性值默认值为: None。
$menu_class(字符串)(可选)ul节点的类属性值默认值为: menu。
$menu_id (string)(可选)ul节点的id属性值默认值为: menu slug,是自增长的。
$echo (boolean)(可选)确定是直接显示菜单还是返回HTML片段:的默认值true(直接显示)。
$fallback_cb(字符串)(可选)如果菜单不存在,被调用的回调函数默认为: wp_page_menu(将页面列表显示为菜单)。
这是一个非常重要的方法,可以用来兼容老版本主题。让我们看看下面的代码。关键是$args也被传递到call_user_func中。例如,我们将参数“sort _ column”=“menu _ order”写入wp_nav_menu的参数中。它还将被传递给call_user_func方法。如果call_user_func是wp_page_menu方法,则显示的页面列表将按照被认为是给定的序列号进行排序。
//如果找不到指定的菜单,或者菜单中没有条目,也没有指定自定义菜单,则使用call_user_func方法处理if((!$ menu | | is _ WP _ error($ menu)| |(isset($menu_items)为空($ menu _ items)!$ args-theme _ location))(function _ exists($ args-fallback _ CB)| | is _ callable($ args-fallback _ CB)))return call _ user _ func($ args-fallback _ CB,(array)$ args);$before (string)(可选)每个菜单链接前显示的文本默认值为:无。
$after(字符串)(可选)每个菜单链接后显示的文本默认值为:无。
$link_before(字符串)(可选)每个菜单的链接文本之前显示的文本默认值为:无。
$link_after(字符串)(可选)在每个菜单的链接文本后显示默认文本值: None。
不知道Codex对$before和$link_before、$after和$link_after的描述是否颠倒了?
$depth(整数)(可选)显示菜单的深度。当该值为0时,将显示所有默认值: 0。
$walker(字符串)(可选)用户定义遍历对象的默认值为: None。
$ theme _ location on(string)(可选)要使用的主题中的位置必须用register _ nav _ menu()注册,以便用户默认值: None可以选择。
如果主题在function.php注册了3个自定义菜单,下面是:
register _ nav _ menus(数组(' Primary '=' Primary Navigation '));register _ nav _ menus(数组('次要'='次要导航'));register _ nav _ menus(数组('底部'='底部导航'));要调用辅助导航菜单,可以在header.php文件中使用以下语句:
wp_nav_menu(数组(' theme _ location '=' secondary '));也就是说,这用于指定自定义菜单的调用。