Wordpress菜单函数wp_nav_menu各参数详解及示例

 

注册菜单

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

 

register_nav_menus(array(

'PrimaryMenu'=>'导航',

'friendlinks'=>'友情链接',

'footer_nav'=>'页脚导航'));

add_theme_support('nav_menus');

 

 

'PrimaryMenu'=>'导航'

这个表示导航栏的名称,左边是别名,右边是名称。别名会用在导航栏的调用上,名称则显示在菜单后台页面上

 

添加上述函数后,进入wp后台,在左侧菜单的"外观"里即多了"菜单"选项

 

创建菜单

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

 

可以看到主题位置显示了三个位置,即刚才我们添加到function.php的函数里设置的

 

注册导航栏

 

在后台创建了菜单,并勾选主题位置后,开始下一步

 

引用菜单

在主题文件对应位置,引用导航栏。需要用到下面这个函数

 

<?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

) );

?>

 

 

这些是几乎所有的参数,还有一个item_space参数没写进去,觉得没什么必要

 

接着来讲讲这些参数如何使用,并给出了相应例子,以供参考

 

最简单的用法

<?php

wp_nav_menu( array( 'theme_location'=>'PrimaryMenu', 'depth' => 0) );

?>

1

2

3

输出结果为:

 

<div class="menu-导航栏-container">

<ul id="menu-导航栏" class="menu">

<li id="menu-item-27" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home menu-item-27"><a href="#">首页</a></li>

<li id="menu-item-28" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-28"><a href="#">一级导航</a>

<ul class="sub-menu">

<li id="menu-item-29" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-29"><a href="#">二级导航</a></li>

<li id="menu-item-30" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-30"><a href="#">二级导航1</a></li>

<li id="menu-item-31" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-31"><a href="#">二级导航2</a></li>

</ul>

</li>

</ul>

</div>

 

 

这里的类名带有中文,即在后台创建菜单的名称。这是一个默认输出的导航菜单结构

 

修改最外层容器标签及类名和id

以下这几个参数,可以修改最外层容器的标签,以及它的类名和id,默认为div

 

<?php

wp_nav_menu( array(

'theme_location'=>'PrimaryMenu',

'container' => 'div',

'container_class' => 'divclass',

'container_id' => 'divid',

'depth' => 0

));

?>

 

 

输出结果

 

<div class="divclass" id="divid">

<ul id="menu-导航栏" class="menu">

<li id="menu-item-27" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home menu-item-27"><a href="#">首页</a></li>

<li id="menu-item-28" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-28"><a href="#">一级导航</a>

<ul class="sub-menu">

<li id="menu-item-29" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-29"><a href="#">二级导航</a></li>

</ul>

</li>

</ul>

</div>

 

 

 

修改ul的class和id

导航菜单的次层容器默认为ul,当然也是可改的,后面会讲到。这里给出了如何修改ul的类名和id

 

<?php

wp_nav_menu( array(

'theme_location'=>'PrimaryMenu',

'menu_class' => 'menuclass', //ul节点class值

'menu_id' => 'menuid', //ul节点id值

'depth' => 0

));

?>

 

 

输出结果

 

<div class="menu-导航栏-container">

<ul id="menuid" class="menuclass">

<li id="menu-item-27" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home menu-item-27"><a href="#">首页</a></li>

<li id="menu-item-28" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-28"><a href="#">一级导航</a>

<ul class="sub-menu">

<li id="menu-item-29" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-29"><a href="#">二级导航</a></li>

</ul></li>

</ul>

</div>

 

 

menu参数的使用

menu参数是用来调用想显示的菜单。一般我们都是在后台操作,创建好菜单,勾选了主题位置后,该位置即使用这个菜单。如果有多菜单的情况下,可以通过menu参数去选择,一般输入菜单名称或菜单id。例如我在后台又创建了一个名为nav1的菜单

 

menu

 

然后如下设置

 

<?php

wp_nav_menu( array(

'theme_location'=>'PrimaryMenu',

'menu' => 'nav1', //期望显示的菜单(输入名称或菜单id)

'depth' => 0

));

?>

 

 

输出结果

 

<div class="menu-nav1-container">

<ul id="menu-nav1" class="menu">

<li id="menu-item-35" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-35"><a href="#">示例页面</a></li>

</ul>

</div>

 

 

可以看到已经不是输出刚才的菜单了

 

插入文本参数的使用

通过这四个参数,可以添加文本到导航栏的文本中

 

<?php

wp_nav_menu( array(

'theme_location'=>'PrimaryMenu',

'before' => '1', //链接前文本

'after' => '2', //链接后文本

'link_before' => '3', //链接文本前

'link_after' => '4',//链接文本后

'depth' => 0

));

?>

 

 

示例输出如下

 

<div class="menu-导航栏-container">

<ul id="menu-导航栏" class="menu">

<li id="menu-item-27" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home menu-item-27">1<a href="#">3首页4</a>2</li>

………………

 

link

 

当然,不止是文本,也可以输出html标签,所以灵活使用这四个参数,可以打造出别具一格的导航菜单

 

items_wrap参数的使用

这个参数控制次层容器,默认为ul标签,通过修改该参数,可以输出不同的菜单结构

 

<?php

wp_nav_menu( array(

'theme_location'=>'PrimaryMenu',

'items_wrap' => '<ul id="ulid" class="ulclass">%3$s</ul>',

'depth' => 0

));

 

/*

参数:

%1$s:最外层容器(由参数container控制)的class名,即参数container_class的值

%2$s:次一层容器class名,默认为menu,即参数menu_class的值

%3$s:菜单内容

*/

?>

 

 

输出结果

 

<div class="menu-导航栏-container">

<ul id="ulid" class="ulclass">

<li id="menu-item-27" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home menu-item-27"><a href="#">首页</a></li>

………………

</ul>

</div>

1

2

3

4

5

6

去除ul标签

 

<?php

wp_nav_menu( array(

'theme_location'=>'PrimaryMenu',

'items_wrap' => '%3$s',

'depth' => 0

));

?>

 

 

输出结果

 

<div class="menu-导航栏-container">

<li id="menu-item-27" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home menu-item-27"><a href="#">首页</a></li>

…………

</div>

 

 

关于其他参数

像depth这个参数,默认0就行了

 

还有其他参数因为几乎很少用到,所以就不讲了

 

具体内容可以查阅官方文档:https://developer.wordpress.org/reference/functions/wp_nav_menu/

 

去除或保留菜单多余类名

将以下代码添加至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";

}

}

 

 

调用方法

 

<?php

wp_nav_menu( array(

'theme_location'=>'PrimaryMenu',

'walker' => new new_walker(),

'fallback_cb' => '',

'depth' => 0

));

?>

 

 

上面只是一个简单例子,通过这个方法,可以自己写一个菜单并调用

 

如果只是简单修改,可以更改\wp-includes\nav-menu-template.php中默认的Walker_Nav_Menu函数

 

示例如下:

 

<?php

function start_lvl( &$output, $depth = 0, $args = array() ) {

if( $depth == 0 ){

$output .= '<ul class="sub-menu">';

}else{

$output .= '<ul class="third-menu">';

}

}

?>

<?php

function end_lvl( &$output, $depth = 0, $args = array() ) {

if( $depth == 0 ){

$output .= "</ul>";

}else{

$output .= '</ul>';

}

}

?>

 

按照以上代码,则生成二级菜单时类名为sub-menul,三级菜单为third-menu

Wordpress菜单函数wp_nav_menu各参数详解及示例的更多相关文章

  1. WordPress菜单函数wp_nav_menu()详细介绍

    导航菜单函数wp_nav_menu()进行详细的说明. 1.wp_nav_menu()函数介绍: worpdress发展到3.0以后增加了一个自定义菜单函数wp_nav_menu(),使得wordpr ...

  2. [js高手之路] es6系列教程 - 函数的默认参数详解

    在ES6之前,我们一般用短路表达式处理默认参数 function show( a, b ){ var a = a || 10; var b = b || 20; console.log( a, b ) ...

  3. setsockopt函数功能及参数详解

    Socket描述符选项[SOL_SOCKET] #include <sys/socket.h> int setsockopt( int socket, int level, int opt ...

  4. curl常用参数详解及示例

    curl简介 curl是一个开源的命令行工具,它基于网络协议,对指定URL进行网络传输,得到数据后不任何具体处理(如:html的渲染等),直接显示在"标准输出"(stdout)上. ...

  5. Nginx配置参数详解参考示例

    user nobody; worker_processes 2; events{ worker_connections 1024; } http{ #设置默认类型为二进制流 default_type ...

  6. WordPress函数:get_bloginfo()用法详解

    描述 返回你博客的信息,这些信息可以用在任何地方的 PHP 代码中.这个函数,和 bloginfo() 一样,可以用来在模板文件的任何地方显示你博客的信息. 用法 <?php $bloginfo ...

  7. PHP date函数参数详解

    PHP date函数参数详解 作者: 字体:[增加 减小] 类型:转载       time()在PHP中是得到一个数字,这个数字表示从1970-01-01到现在共走了多少秒,很奇怪吧 不过这样方便计 ...

  8. Python函数参数详解

    Python函数参数详解 形参与实参 什么是形参 在定义函数阶段定义的参数称之为形式参数,简称形参,相当于变量名. 什么是实参 在调用函数阶段传入的值称为实际参数,简称实参.相当于"变量值& ...

  9. C/C++子函数参数传递,堆栈帧、堆栈参数详解

    本文转载自C/C++子函数参数传递,堆栈帧.堆栈参数详解 导语 因为参数传递和汇编语言有很大联系,之后会出现较多x86汇编代码. 该文会先讲一下x86的堆栈参数传递过程,然后再分析C/C++子函数是怎 ...

随机推荐

  1. [SCOI2007]修车 费用流 BZOJ 1070

    题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待 ...

  2. jdk tomcat

    vi /etc/profile export JAVA_HOME=/usr/java/jdk1.8.0_121export JRE_HOME=/usr/java/jdk1.8.0_121/jreexp ...

  3. CAS操作

    CAS操作: Compare and Swap,比较并操作,CPU指令,在大多数处理器架构,包括IA32.Space中采用的都是CAS指令,CAS的语义是“我认为V的值应该为A,如果是,那么将V的值更 ...

  4. HDU 4143 A Simple Problem 分解因式

    求一个最小的正整数x,使得(y + x) (y - x) = n成立 考虑一下n的分解因式. 可能会想到枚举n的约数,那么a * b = n成立,取最小的x即可 但是要枚举到n / 2,这样会超时. ...

  5. 使用 ViS2005 进行单元测试

    1. 新建一个空白解决方案,命名为"单元测试- 01"吧. 2.在该解决方案下创建一个类库,作为此次单元测试的测试对象:我们就创建一个数学类(用于实现运算的简单类).命名为&quo ...

  6. 【踩坑】服务器部署springboot应用时报错--端口被tomcat占用

    今天将本机尬聊一下项目(基于netty-socketio)的服务端程序调试好以后,通过jar包部署在服务器的时候,出现了报错,提示tomcat已经占用了端口. 之前在部署iReview项目时的确是通过 ...

  7. git 使用流程 命令

    克隆远程分支到本地 git clone <https://github.com/cqzyl/methods.js.git> 进入master分支 git checkout master 以 ...

  8. DB错误代码大全

    db2错误代码大全  sqlcode sqlstate 说明000 00000 SQL语句成功完成01xxx SQL语句成功完成,但是有警告+012 01545 未限定的列名被解释为一个有相互关系的引 ...

  9. linux 链接的使用 创建和删除符号连接

    1 . 使用方式 :ln [option] source_file dist_file                     -f 建立时,将同档案名删除.                     ...

  10. zip、rar压缩文件密码破解——使用ARCHPR Professional Edition

    直链下载地址: https://pan.abn.cc/weiyun/down.php?u=82441366e3c1f43fc69210e8ece93470.undefined.zip (压缩包内含解压 ...