Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >wp_nav_menu 函数经Walker_Nav_Menu 类自定义导航菜单HTML

wp_nav_menu 函数经Walker_Nav_Menu 类自定义导航菜单HTML

作者头像
Jeff
发布于 2018-01-19 09:33:09
发布于 2018-01-19 09:33:09
2.6K0
举报
文章被收录于专栏:DeveWorkDeveWork

WordPress 中有一个导航菜单函数wp_nav_menu,通过这个函数可以控制菜单输出的HTML 结构,一般开发者用这个函数的一般是在输出HTML 中自定义一些id 或者class 而已,整体的HTML 结构还是WordPress 默认的。项目的需求是各种各样的,了解如何自定义导航菜单HTML 结构就十分重要了。

wp_nav_menu 函数

囿于篇幅,本文不会教你怎么使用wp_nav_menu 函数,请自行补习。通过设置wp_nav_menu 的参数,前台输出的HTML 结构大概都是这样的(为了简洁,去除了一些id、class):

<nav> <div class=""> <ul id="" class=""> <li id="" class=""><a href="">首页</a></li> <li id="" class=""><a href="">存档</a></li> <ul class="sub-menu"> <li><a href="">WP开发</a></li> <li><a href="">WP开发</a></li> </ul> <li id="" class=""><a href="">学习</a></li> </ul> </div> </nav>

这个默认的菜单HTML 结构有非常大的限制(比如说我想在每个li前面添加个标签办不了,一些class的名称也定义不了),如果只这么用根本不能适应各种各样的项目需求,好在WordPress 提供了一个类Walker_Nav_Menu ,通过这个类我们可以自定义HTML 结构。

Walker_Nav_Menu 的用法(例子)

wp_nav_menu 函数中有个参数 $walker,“自定义的遍历对象,调用一个对象定义显示导航菜单。”,默认调用的是Walker_Nav_Menu (其实输出默认结构的就是这个在作怪,位于wp-includes/nav-menu-templates.php)。为了能够自定义HTML 结构,你必须打开wp-includes/nav-menu-templates.php,查看默认的代码,搞清楚与前端输出代码的关系,并在其基础上修改,然后自定义为新的一个类供wp_nav_menu 函数调用。

例子:

比如说WordPress 中输出二级菜单的话,ul 中类名默认是sub-menu,那我想改为child-menu,怎么办?

步骤:

打开wp-includes/nav-menu-templates.php,找到产生ul class="sub-menu"的代码:

function start_lvl( &$output, $depth = 0, $args = array() ) { $indent = str_repeat("\t", $depth); $output .= "\n$indent<ul class=\"sub-menu\">\n"; }

那么根据我的需求,代码应该改成是:

function start_lvl( &$output, $depth = 0, $args = array() ) { $indent = str_repeat("\t", $depth); $output .= "\n$indent<ul class=\"child-menu\">\n"; }

准确来讲,整体的类的代码应该是(dw_walker这个类名是自己取的,请自行定义):

class dw_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"; } }

然后在wp_nav_menu 函数中调用这个自定义的类:

<?php wp_nav_menu( array( 'theme_location' => 'mobilemenu', 'walker' => new dw_walker(), 'fallback_cb' => '' ) ); ?>

上诉只是举了个简单的例子来告知Walker_Nav_Menu 类的使用,实际项目中肯定不单单那么简单的,这么来讲,除了基本的WordPress 知识、html+CSS,还需要一些PHP 知识。

更多例子的话,最近发布EaseMobile 主题在导航栏上的图标设置就是采用了Walker_Nav_Menu 类自定义输出。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014/04/19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
wordpress导航菜单详解及改造
对于wordpress主题来说 wp的菜单是必不可少的 可以用于制作导航栏 也可以做侧边栏、页脚导航等等 只要熟练掌握 就能利用wp菜单做成想要的东西 话不多说 现在先讲一下菜单的创建 首先要开启导航菜单功能 下面是一个例子 /* register_nav_menu( $location, $description ) 函数功能:开启导航菜单功能 @参数 string $location, 导航菜单的位置 @参数 string $description, 导航菜单的描述 开启多个位置的导航菜单,只需要重
企鹅号小编
2018/02/24
3.2K0
wordpress导航菜单详解及改造
WordPress菜单函数wp_nav_menu各参数
wordpress主题制作时,常常会在不同的位置调用不同的菜单,使用下面的这个代码,再加上CSS给菜单做新的样式,可满足wordpress模板制作时对菜单调用的所有需求。
WordPress爱好者
2024/08/11
870
WordPress菜单函数wp_nav_menu各参数
使用 WordPress 的导航菜单
WordPress 原来默认的导航菜单只能是页面,或者分类,或者两者,如果想自己加入一个自定义链接都需要修改主题,非常不方便,所以一个完全可定制化的自定义的 WordPress 导航菜单成了所有人的需求。
Denis
2023/04/14
2.1K0
使用 WordPress 的导航菜单
wordpress去掉自定义菜单的外层div
  wordpress调用自定义菜单时自动会在外层加一个<div class="menu-nav-container">,如下图所示,nav是后台定义的菜单名称,如果想把这个div去掉要如何操作呢?随ytkah一起来看看吧
ytkah
2019/09/25
5390
wordpress去掉自定义菜单的外层div
WordPress 自定义菜单功能介绍和使用详解
一个常规的网站,一般都会有一个网站导航。这里的导航,通常包含网站的栏目、特殊的页面等等。对于一个博客来说,我们也需要一个这样的导航。如果仅仅是调用文章分类 或者页面链接作为导航的话,会比较难控制,无法自由的添加链接等。当然,成熟的 WordPress 系统已经为我们考虑到了这一点,添加了一个 “自定义菜单” 功能。使用这个功能,可以在 后台 > 外观 > 菜单 中编辑,当然最好前提是你使用的主题支持这一个功能。
Denis
2023/04/14
1.2K0
WordPress 自定义菜单功能介绍和使用详解
WordPress 技巧:给 wp_nav_menu 函数添加缓存,提高页面效率
WordPress 自定义菜单功能是非常好用的一个功能,但是我们在实际使用的过程当中,却发现一个非常严重的问题,效率非常低下,如果自定义菜单比较复杂的话,会产生多达十几条甚至几十条的 SQL 查询,我认真查看了下 wp_nav_menu 函数的源代码发现其没使用进行缓存,但是 wp_nav_menu 又没有足够多的 hook,于是我只能重写了一个 wpjam_nav_menu 函数,使用 WordPress Transients API 对生成的菜单进行缓存,大大提高页面的效率:
Denis
2023/04/15
4100
wordpress输出导航菜单
更多参照 https://developer.wordpress.org/reference/functions/wp_get_nav_menu_items/
切图仔
2022/09/14
1.9K0
wordpress输出导航菜单
bootstrap nav 导航菜单
nav nav-tabs <p>标签式的导航菜单</p> <ul class="nav nav-tabs"> <li class="active"><a href="#">Home</a></li> <li><a href="#">SVN</a></li> <li><a href="#">iOS</a></li> <li><a href="#">VB.Net</a></li> <li><a href="#">Java</a></li> <li><a href="#">PHP</a></li> </ul>
用户5760343
2019/07/05
5K0
bootstrap nav 导航菜单
WordPress 常用模板函数速查表
如果你是一个 WordPress 主题作者,你肯定会经常到 WordPress 的 Codex 去搜索一些常用的模板函数,每次查询的话,有点麻烦,所以为了方便查询,制作了这个 WordPress 常用模板函数速查表。
Denis
2023/04/15
4990
wordpress自定义菜单间添加分隔符
  我们知道wordpress自定义菜单每个item是用<li></li>来固定的,那如果想在</li>加分隔符要如何操作呢?如下图所示。我们可以用PHP的str_replace()函数来实现,随ytkah一起来看看吧
ytkah
2019/11/07
5560
删除WordPress菜单wp-nav-menu中li的class或id样式
  我们都知道wordpress已经集成了一些通用的css样式,比如wp-nav-menu菜单会有很多的class,不想看到那么多的选择器,想要清净的世界要如何操作呢?随ytkah一起来看看
ytkah
2019/07/18
1.4K0
WordPress 技巧:缓存自定义菜单,加快博客速度
我前面撰写了一个新函数 wpjam_nav_menu,它是缓存版的 wp_nav_menu。升级到 WordPress 3.9 之后,WordPress 提供了 pre_wp_nav_menu filter 接口,我们可以直接通过这个接口来缓存自定义菜单结果了,无需使用新函数了,这样方便了很多。
Denis
2023/04/15
2020
HTML导航菜单
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/159456.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/17
6.2K0
界面组件之导航菜单备案
<li><a href="#" rel="prev">prev</a></li>
小蔚
2019/09/11
2K0
界面组件之导航菜单备案
WEB入门.九 导航菜单
上一章节中讲解了 background 属性的用法,以及两种主流的背景特效——页面图片整合技术以及滑动门技术,设计师可以使用这两种技术制作出多种页面背景特效,如平滑投票、Tab 导航菜单等。
张哥编程
2024/12/17
2070
WEB入门.九  导航菜单
HTML+CSS实战(一)——导航条菜单的制作
一、垂直导航菜单的制作 1、基本的样式清除: *{margin:0;padding:0} 2、无序列表圆点去除: ul{list-style:none} 3、下划线去除: a{text-decoration:none} 4、文本缩进标签 text-indent 不会影响总体宽度(padding会) 5、使用行高line-height可以实现文字默认居中,前提是行高和width相等。 6、需要将a标签设置为块元素,才能设高宽、hover效果 代码:a{display:block}hover格式 a:hover{}//通过a:hover,可以为菜单增加交互效果。
全栈程序员站长
2022/09/15
3.1K0
HTML+CSS实战(一)——导航条菜单的制作
WordPress主题开发,从入门到精通。
相关文档:https://www.wpzhiku.com/document/wordpress-plugin-basics/
房东的狗丶
2023/02/17
10.8K0
无限级菜单/权限树该如何设计
常用的树形显示插件有: JsTree, zTree, Layui Tree, Bootstrap Tree View 等。
一份执着✘
2018/12/14
5.7K0
删除 WordPress 导航菜单的多余 CSS 选择器
在默认情况下,WordPress 的导航菜单会输出很多如menu-item、menu-item-type-taxonomy、menu-item-object-category等加上 id 组成的CSS
Jeff
2018/01/19
1.6K0
删除 WordPress 导航菜单的多余 CSS 选择器
删除 WordPress 导航菜单的多余 CSS 选择器(id或class)
在默认情况下,WordPress 的导航菜单会输出很多如menu-item、menu-item-type-taxonomy、menu-item-object-category等加上 id 组成的CSS 选择器,无疑,对于一些人来说,这些选择器导致整个html 格式变得难看,看着碍眼的东西最好是将它去掉,之前Jeff 也曾有过一篇类似的文章《删除 WordPress 导航菜单的多余 CSS 选择器》,今天则介绍个通过添加过滤器来删除 WordPress 导航菜单的多余 CSS 选择器(id或class)的新方
Jeff
2018/01/19
1.7K0
删除 WordPress 导航菜单的多余 CSS 选择器(id或class)
相关推荐
wordpress导航菜单详解及改造
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档