给wordpress添加导航,实现后台的生成菜单调用,并在前台显示

3,359次阅读
没有评论

共计 3780 个字符,预计需要花费 10 分钟才能阅读完成。

最近发现一款主题,很不错,但是接手之后,发现好多功能都不能实现,于是我通过查找资料,自己千万次测试,终于实现了一些功能。

这款主题可能是在wordpress3.0之前制作的吧,由于设置比较费力,不能在后台直接添加导航分类,也不能在后台添加友情链接,更不能实现下 拉菜单以及cms模块分类,只能查找代码在本地一一手动添加ID和分类菜单标签以及链接,由于好多都是原作者之前的链接和分类标签,导致主题实现很费力。 费时费力不说,以后想更换菜单还得改代码,真麻烦。鉴于我迫切需要这样一款cms类型的主题,网上用这款的人还很少,基本上没有,我估计是这款主题功能不 完善吧。

经过在本地搭建php环境,测试了一遍又一遍,初步实现了后台生成菜单调用在前台显示,也实现了后台调用友情链接。实现了一些比如说前台登陆,登陆 跳转,通过修改CSS修复了一些错位等等的问题,至于分类ID后台直接设置的功能暂时还不能很快实现,等我以后慢慢再研究吧。等主题基本可用的时候欢迎大 家围观我的新站。这里就不献丑了。

这篇文章简单介绍一下我实现导航菜单的一些细节,由于网上的教程都很繁琐不能弄明白,我简单介绍一下,本人新手,就不在大侠面前班门弄斧了,只说一下经验。

如果你的主题是很早以前的版本,不能实现后台直接设置调用,或者你想要给你的主题新添加导航的话,我这里或许可以给你一些启发。

你需要接触到的是WordPress 3.0 的wp_nav_menu函数,这个函数主要用途是通过该方法,实现后台的生成菜单调用,并在前台显示。即后台这个地方:

使用该功能之前,必须激活主题3.0+菜单功能。

你需要在主题文件functions.php中作如下申明:

// 菜单声明

if(function_exists(‘register_nav_menu’)){
register_nav_menu(‘mainmenu’,’主导航’);
register_nav_menu(‘topmenu’,’顶部导航’);
}
if (!is_nav_menu(‘主导航’)||!is_nav_menu(‘顶部导航’)){
$menu_id_1 = wp_create_nav_menu(‘主导航’);
$menu_id_2 = wp_create_nav_menu(‘顶部导航’);
wp_update_nav_menu_item($menu_id_1, 0);
wp_update_nav_menu_item($menu_id_2, 1);
}

申明之后,进入后台你就会发现菜单功能已经可以试用了,并且出现了主导航和顶部导航两个菜单。

以上代码的具体意义我就不过多说明了,相信经验丰富的你一看就知道是什么意思,鉴于是采用别人的代码,我自己也不敢妄加评说。

只是提醒大家,如果不需要添加顶部导航的话,可以把代码精简一下,我自己删减了几行,如下:

// 菜单声明
if(function_exists(‘register_nav_menu’)){
register_nav_menu(‘mainmenu’,’主导航’);
}
if (!is_nav_menu(‘主导航’)){
$menu_id_1 = wp_create_nav_menu(‘主导航’);
wp_update_nav_menu_item($menu_id_1, 0);
}

这样的话,就只剩下“主导航”菜单了。

接下来你就可以在主导航里添加你想要的分类或者页面了。别急,这还不能在前台显示,要想在前台显示,你还需要在要在前台(主题中)调用这个主导航。

在你的主题模板中使用以下代码(在index.php挥着herder.php  footer.php中,由于我想要弄顶部的大导航,所以我是添加在herder.php里。

<?php wp_nav_menu(‘menu=主导航&theme_location=mainmenu’); ?>

或者

<?php wp_nav_menu(‘theme_location=mainmenu’); ?>

即可实现调用,而我们把mainmenu改为topmenu,就将调用topmenu这个导航。wp_nav_menu()函数提供了一系列的函数参数,让我们在获得导航时有充分的控制。函数如下:

 <?php $defaults = array(
‘theme_location’  => ,
‘menu’            => ,
‘container’       => ‘div’,
‘container_class’ => ‘menu-{menu slug}-container’,
‘container_id’    => ,
‘menu_class’      => ‘menu’,
‘menu_id’         => ,
‘echo’            => true,
‘fallback_cb’     => ‘wp_page_menu’,
‘before’          => ,
‘after’           => ,
‘link_before’     => ,
‘link_after’      => ,
‘items_wrap’      => ‘<ul id=”%1$s” class=”%2$s”>%3$s</ul>’,
‘depth’           => 0,
‘walker’          => );
?>

<?php wp_nav_menu( $defaults ); ?>

这个函数是官方给出的,用于设置导航显示出的效果,我通过谷歌浏览器的翻译功能,仔细研究了一下。结合我的主题本身给出的参数,就在以上的参数种选择性的截取了几条加在了我的herder.php中。

以下做简单翻译,当然我不懂的就不翻译了:

//最外层容器的标签名,默认div
‘container’ => ‘div’,
//最外层容器的class名
‘container_class’ => ‘mainNavBlock’,
//最外层容器的id名
‘container_id’ => ‘menu’,
//导航菜单ul标签的class名
‘menu_class’ => ‘mainNav’,
//导航菜单ul标签的id名
‘menu_id’ => “nav”,
//是否打印,默认是true,如果想将导航的代码作为赋值使用,可设置为false
‘echo’ => true,
//备用的导航菜单函数,用于没有在后台设置导航时调用
‘fallback_cb’ => ‘the_main_nav’,
//显示在导航a标签之前
‘before’ => ‘<p>’,
//显示在导航a标签之后
‘after’ => ‘</p>’,
//显示在导航链接名之前
‘link_before’ => ‘<em>’,
//显示在导航链接名之后
‘link_after’ => ‘</em>’,
//显示的菜单层数,默认0,0是显示所有层
‘depth’ => 0,
//调用一个对象定义显示导航菜单
‘walker’ => new Walker_Nav_Menu(),
//指定显示的导航名,如果没有设置,则显示第一个
‘theme_location’ => ‘primary’,
);
//打印导航菜单
wp_nav_menu( $menu_args );

根据我的导航条需要,由于一些参数我的herder.php里原先就有,于是我截取了如下内容:

<?php $defaults = array(
‘theme_location’ => ‘mainmenu’,
‘fallback_cb’ => ‘wp_page_menu’,
‘link_before’ => ‘<span>’,
‘link_after’ => ‘</span>’,
‘items_wrap’ => ‘<ul id=”%1$s”>%3$s</ul>’,
‘depth’ => 0,
); ?>

<?php wp_nav_menu( $defaults ); ?>

最终我的导航部分的所有代码如下:

<div>
<div>
<ul id=”hd-nav”>
<li><a href=”<?php echo get_option(‘siteurl’); ?>”><span>首页</span></a></li>
<?php $defaults = array(
‘theme_location’ => ‘mainmenu’,
‘fallback_cb’ => ‘wp_page_menu’,
‘link_before’ => ‘<span>’,
‘link_after’ => ‘</span>’,
‘items_wrap’ => ‘<ul id=”%1$s”>%3$s</ul>’,
‘depth’ => 0,
); ?>

<?php wp_nav_menu( $defaults ); ?>

</ul>
</div>
</div>

通过以上设置再加上CSS的控制,导航部分基本可以显示正确的效果了,由于我没有做IE6的测试,不敢保证能兼容ie6等一些冷门浏览器。我也不是很懂CSS,最近几天才接触,只会一些位置以及颜色的设置,所以也就不班门弄斧了。

以上设置只能显示横排一级导航,二级导航显示会错位,还需要设置滑动的下拉菜单。下拉菜单的设置我就不讲了,大家在网上都可以一清二楚。

写这篇文章的目的不是为了重复,而是更详细的说明应该怎么设置,对于在网上盲目找教程的同志们能有一些帮助吧。把经验分享给大家也是我的初衷。

以后我还会慢慢总结一些更详细的教程。这里先告一段落。谢谢大家围观。

正文完
 0
评论(没有评论)

空瓶子部落

文章搜索
推荐阅读
揭秘O型圈常见问题:如何快速识别并解决异常现象!

揭秘O型圈常见问题:如何快速识别并解决异常现象!

O型圈的工作原理 O型圈是一种环形的密封元件,通常由弹性材料(如橡胶、聚氨酯或氟橡胶)制成。其工作原理基于其弹...
汽车线束插件退针失效模式及全流程管控方案

汽车线束插件退针失效模式及全流程管控方案

  一、退针失效模式深度解析 1. 端子自身失效(占比~35%) 失效类型 失效机理 典型特征 保持力不足 端...
听今井正明先生谈改善

听今井正明先生谈改善

这一次的改善大会迎来了最重量级的嘉宾—全球改善咨询集团的创始人今井正明先生。这是继三月份在北京举行...
车间现场6S画线标准

车间现场6S画线标准

A01 画线颜色管理 目的:对生产车间所有工作场所实施统一的颜色管理,不仅是为了美观,更是为了通过直观的视觉标...
最新文章
群晖 Let’s Encrypt 泛域名证书自动更新

群晖 Let’s Encrypt 泛域名证书自动更新

目前acme协议版本更新,开始支持泛域名(wildcard),也就是说,可以申请一个类似*.domain.co...
可以卸载TV Box 了,这款支持「绅士模式」的影视神器你值得拥有

可以卸载TV Box 了,这款支持「绅士模式」的影视神器你值得拥有

还在为找优秀片源难、广告多、平台会员太贵而烦恼?今天给大家挖到一款真正的影视宝藏工具——小猫影视! 作为开源免...
【收藏】一次性解决TV点播/直播自由

【收藏】一次性解决TV点播/直播自由

很多时候,资源就在面前,但是我们视而不见,因为长久的安逸,已经让人失去动手的兴趣。但是每次我需要挨个切换APP...
OpenWrt 存储空间扩容的两种方案

OpenWrt 存储空间扩容的两种方案

说明:当我们通过群晖 VMM 虚拟机安装 Open­Wrt 时,默认会分配一个 10GB 的存储空间,而实际情...
OpenWrt修改IP地址两种方法(直接命令修改跟后台修改)

OpenWrt修改IP地址两种方法(直接命令修改跟后台修改)

OpenWrt是什么?OpenWrt一般常见于无线路由器(软路由)第三方固件,它是一个高效、可靠、功能多的路由...
热门文章
提高过程能力指数(CP/CPK)的途径

提高过程能力指数(CP/CPK)的途径

编者按:过程能力指数(CP/CPK)想必各位质量人都耳熟能详、运用自如,质量工程师之家前期也共享过数篇关于过程...
SPC控制图的八种模式分析

SPC控制图的八种模式分析

SPC控制图有八种模式,即八种判断异常的检验准则,每一种检验准则代表一种异常现象,应用SPC控制图进行过程评估...
测量高手放大招:圆跳动测量技巧总结

测量高手放大招:圆跳动测量技巧总结

01. 前言 在五金机加工厂实际的测量工作中,经常碰到要求测量两个要素的圆跳动问题, 利用不同的测量辅件及夹具...
过程能力分析(CP&cpk)

过程能力分析(CP&cpk)

引入过程能力分析的目的? 在我们现有的管理过程中,我们经常会遇到有些具体指标总是不尽人意,存在许多需要改进的地...
新能源汽车 “两会”精神宣贯会

新能源汽车 “两会”精神宣贯会

此次和大家分享新能源汽车相关政策: [embeddoc url=”https://www.ctro...
最新评论
多乐士 多乐士 通过摸索发现ssh拉取会报错,直接网页访问下载会报404错误,不知道原因;但是可以通过群晖CM注册表访问下载,其方法如下: Container Manager-注册表-设置-新增-注册表名称随便写,注册表URL填你的加速地址,勾选信任的SSL自我签署证书,登录信息不填-应用-使用你的地址,这是注册表会显示了,在搜索栏中输入映像名称,搜索结果在每一页的最后一个,你需要划到最后一个进行下载,实测可正常下载安装。 以上供网友参考。
多乐士 多乐士 还有一个比较简单的方法,只是需要一些外部工具。 1、讲损毁硬盘取出,装入外部移动硬盘 2、打开Diskgenius,定位到硬盘 3、格式化系统分区 4、重新插入硬盘 5、存储池->修复存储池即可
多乐士 多乐士 写的不错的文章
辞了老衲 辞了老衲 这个确实有帮助。
渋驀 渋驀 当然任何时候都可以用curl命令和crontab来实现动态更新DDNS的ip地址: 1、安装crontab之后为root用户创建文件/var/spool/cron/root 2、创建并配置ddnsupdate.sh,放到/usr/bin/文件下,文件内容(以he.net为例): Autodetect my IPv4/IPv6 address: IPV4:curl -4 "http://dyn.example.com:password@dyn.dns.he.net/nic/update?hostname=dyn.example.com" IPV6:curl -6 "http://dyn.example.com:password@dyn.dns.he.net/nic/update?hostname=dyn.example.com" 3、添加执行权限chomod +x /usr/bin/ddnsupdate.sh 4、编辑root用户的crontab:*/10 * * * * /usr/binddnsupdate.sh,每10分钟执行一次。好了,可以享受你的DDNS了
21410 21410 请问下载链接在那里?
madkylin madkylin 不错,不错,谢谢分享了,好东西啊 :lol:
feilung feilung 求方法
zengsuyi zengsuyi 应该挺不错的
zise zise 看看是怎么操作的。。 :oops: