WordPress开发中自定义菜单的相关PHP函数使用简介


Posted in PHP onJanuary 05, 2016

函数意义
wp_nav_menu ()
自定义菜单显示函数

register_nav_menu ()
自定义菜单注册函数 ? 单数

register_nav_menus ()
自定义菜单注册函数 ? 复数 (很蛋疼的一个复数形式)

以下举例均用 register_nav_menus () 这个复数形式,以免混淆。

使用位置
register_nav_menus ()
function.php 文件中,用于注册自定义菜单在后台的代码调用名称和后台显示名称。

wp_nav_menu ()
主题任意你想调用自定义菜单的位置。

使用方法
注册4个菜单更正:3个菜单(困了,老出错。)

register_nav_menus( array( 
 'nav1' => 'n1',
//nav1 为菜单名称(调用的时候用)
//n1 为显示名称 , 后台选菜单的时候用
 
 'nav2' => 'n2',
 
 'nav3' => 'n3'
 
 ));

然后去你的后台 =》 外观 =》 菜单 里面看下,
基本上你就明白了,
要是不明白,
那你就再看一下,嘿嘿~

主题你想要显示自定义导航的位置添加以下代码。

 

//调用 nav1 的菜单
<?php wp_nav_menu( array( 'theme_location' => 'nav1' ) ); ?>
 
//调用 nav2 的菜单
<?php wp_nav_menu( array( 'theme_location' => 'nav2' ) ); ?>

然后就可以到后台去添加一个菜单了,(名称最好是名称或中文。更正:最好是英文。)
你可以设定这个菜单里面显示什么,不显示什么,甚至可以设置导航的层级内容,很方便的说。

过滤掉自定义菜单中无用的CLASS值
在 WordPress 的自定义菜单的输出中,菜单中每一个子元素都有一个很长的 class 值,虽然从外观上看不出什么异样来,但从代码上看确实让人心里很难受,其实要过滤掉这些 class 值有很多方法,今天来讲一下通过挂载过滤器 (filter),去除那些我们不想要的class。
在 WordPress 3.5.0 以后的版本中将取消友情链接功能,并以自定义菜单功能实现,这个是后话。
我们在输出自定义菜单的时候,为了让我们更好的控制自定义样式, WordPress 会默认给我们菜单的子元素输出很多个 class 的值,就像下面这样。

<li id="menu-item-19" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-19">

如何过滤之,让我们的网页源代码变得简洁、易读呢?

在你的functions.php里面加入

function filter_nav_menu_css_class ($classes){
//想要通过的class值
 $do_class_name = array('current-menu-item');
 $outPut = array_intersect($do_class_name,$classes);
 array_filter( $classes );
 return $outPut;
};
add_filter('nav_menu_css_class','filter_nav_menu_css_class');

这里将 current-menu-item 这个值保留主要是为了辨别当前页面。

其实,
还有其他方法去过滤输出的 class 值的,
比如说控制 Walker_Nav_Menu 这个类来精确控制自定义菜单的输出,
但因为比较麻烦所以在这里先不提,其实 Walker_Nav_Menu 这个类可以完成更多我们需要的功能。

总结 ? 需注意
自定义菜单式在 WordPress 3.0 后才引入的一个功能概念,有点类似于之前的小工具,不过自定义菜单更倾向于导航用途,但因为新功能的中文翻译、流传较慢,再加上这个功能只要是主题成型的爱折腾的博主一般不会在导航方面折腾,所以大家还一直不了解,甚至都出现了错误教程满天飞得局面,在这里希望有的博主在发表博文的时候不要以转载为主,就算是转载一些主要功能请具体测试一下,以免误导新人。

需注意:
后台设置中如果没有给自定义导航里面设定菜单的话,那wp会为没有设定菜单的导航里自动添加所有页面为导航,这是一个蛋疼的缺省,所以如果这个导航我们不想显示的话,你最好能在后天设定一个空的菜单,然后给不想显示的导航添加这个菜单,这样自定义导航就不会显示了。

PHP 相关文章推荐
PHP的面试题集,附我的答案和分析(一)
Nov 19 PHP
PHP和XSS跨站攻击的防范
Apr 17 PHP
php相当简单的分页类
Oct 02 PHP
PHP 程序员也要学会使用“异常”
Jun 16 PHP
PHP数组和explode函数示例总结
May 08 PHP
ThinkPHP进程计数类Process用法实例详解
Sep 25 PHP
Yii2增加验证码步骤详解
Apr 25 PHP
php session_decode函数用法讲解
May 26 PHP
PHP FileSystem 文件系统常用api整理总结
Jul 12 PHP
yii框架使用分页的方法分析
Jul 25 PHP
php中文语义分析实现方法示例
Sep 28 PHP
PHP队列场景以及实现代码实例详解
Feb 26 PHP
PHP使用Pear发送邮件(Windows环境)
Jan 05 #PHP
WordPress中用于获取搜索表单的PHP函数使用解析
Jan 05 #PHP
在WordPress中使用wp_count_posts函数来统计文章数量
Jan 05 #PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
Jan 05 #PHP
简单的php+mysql聊天室实现方法(附源码)
Jan 05 #PHP
基于PHP实现简单的随机抽奖小程序
Jan 05 #PHP
详解WordPress开发中的get_post与get_posts函数使用
Jan 04 #PHP
You might like
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
提高php运行速度的一些小技巧分享
2012/07/03 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
浅析php设计模式之数据对象映射模式
2016/03/03 PHP
PHP中如何使用Redis接管文件存储Session详解
2018/11/28 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
javascript xml为数据源的下拉框控件
2009/07/07 Javascript
dojo随手记 gird组件引用
2011/02/24 Javascript
提高javascript效率 一次判断,而不要次次判断
2012/03/30 Javascript
JQuery触发事件例如click
2013/09/11 Javascript
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
2017/04/27 Javascript
分析javascript原型及原型链
2018/03/18 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
Python Subprocess模块原理及实例
2019/08/26 Python
python 操作mysql数据中fetchone()和fetchall()方式
2020/05/15 Python
python实现每天自动签到领积分的示例代码
2020/08/18 Python
python中pop()函数的语法与实例
2020/12/01 Python
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
G-Form护具官方网站:美国运动保护装备
2019/09/04 全球购物
Fox Racing官方网站:越野摩托车和山地自行车装备和服装
2019/12/23 全球购物
C#中有没有运算符重载?能否使用指针?
2014/05/05 面试题
init进程的作用
2015/08/20 面试题
工程监理应届生求职信
2013/11/09 职场文书
导师就业推荐信范文
2014/05/22 职场文书
体育口号大全
2014/06/18 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
重阳节活动主持词
2015/07/04 职场文书
烈士陵园扫墓感想
2015/08/07 职场文书
护士年终工作总结不会写?各科护士模板总结
2020/01/02 职场文书
python 下划线的多种应用场景总结
2021/05/12 Python
在Python中如何使用yield
2021/06/07 Python