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 相关文章推荐
4.与数据库的连接
Oct 09 PHP
用PHP将数据导入到Foxmail
Oct 09 PHP
解析PHP中的unset究竟会不会释放内存
Jul 18 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
Nov 07 PHP
php通过function_exists检测函数是否存在的方法
Mar 18 PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
Dec 07 PHP
Zend Framework教程之Zend_Registry对象用法分析
Mar 22 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
Apr 04 PHP
php自动载入类用法实例分析
Jun 24 PHP
解决php-fpm.service not found问题的办法
Jun 06 PHP
PHP实现的折半查询算法示例
Oct 09 PHP
PHP实现找出链表中环的入口节点
Jan 16 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
PHP生成静态页面详解
2006/11/19 PHP
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
PHP判断图片格式的七种方法小结
2013/06/03 PHP
PHP5常用函数列表(分享)
2013/06/07 PHP
解析smarty 截取字符串函数 truncate的用法介绍
2013/06/20 PHP
纯PHP代码实现支付宝批量付款
2015/12/24 PHP
php判断用户是否关注微信公众号
2016/07/22 PHP
php解决和避免form表单重复提交的几种方法
2016/08/31 PHP
Zend Framework入门教程之Zend_Mail用法示例
2016/12/08 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
在 Laravel 项目中使用 webpack-encore的方法
2019/07/21 PHP
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
jQuery添加和删除输入文本框标签代码
2016/05/20 Javascript
Angular.JS学习之依赖注入$injector详析
2016/10/20 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
2016/11/10 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
jQuery插件实现图片轮播效果
2020/10/19 jQuery
vue 实现图片懒加载功能
2020/12/31 Vue.js
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
python实现统计代码行数的方法
2015/05/22 Python
python使用urllib2提交http post请求的方法
2015/05/26 Python
Python之读取TXT文件的方法小结
2018/04/27 Python
python中数组和矩阵乘法及使用总结(推荐)
2019/05/18 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
python——全排列数的生成方式
2020/02/26 Python
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
物流司机岗位职责
2013/12/28 职场文书
社区党员志愿服务活动方案
2014/08/18 职场文书
现役军人家属慰问信
2015/03/24 职场文书
紫日观后感
2015/06/05 职场文书
感恩教师节主题班会
2015/08/12 职场文书
Python List remove()实例用法详解
2021/08/02 Python
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android