网站运营
位置:首页>> 网站运营>> 改进你的WordPress导航菜单-输出标题描述

改进你的WordPress导航菜单-输出标题描述

  发布时间:2011-12-07 11:00:27 

标签:WordPress,导航,标题

在WordPress 3.0中增加了自定义菜单功能,如果你在WordPress后台(外观》菜单)创建一个菜单,你可以在主题中使用wp_nav_menu()函数来显示这些菜单。但是像图中这种带描述的导航菜单还无法简单实现,本文将教你改变WordPress默认的菜单输出结构,打造个性的导航菜单。

首先我们先看下默认的输出结构:

<ul id="menu-main">
    <li><a href="#">首页</a></li>
    <li><a href="#">关于</a></li>
    <li><a href="#">联系</a></li>
    <li><a href="#">博客</a></li>
</ul>

默认的结构根本不可能输出我们想要的效果,所以我们需要改变输出的结果:

<ul id="menu-main">
     <li><a href="#"><strong>首页</strong><span>Home</span></a></li>
     <li><a href="#"><strong>关于</strong><span>About</span></a></li>
     <li><a href="#"><strong>联系</strong><span>Contact</span></a></li>
     <li><a href="#"><strong>博客</strong><span>Blog</span></a></li>
</ul>

准备工作

我们要做的第一件事就是到菜单页面,你会发现每个菜单项都有一个“标题属性”,了解网页都知道这是用来显示鼠标移到链接上后的提示性文字,首先把你希望显示的文字先填上~

自定义walker类编辑输出结构

WordPress使用一个特殊的“Walker”类来遍历数据记录并显示出来。幸运的是,我们可以很轻松的创建属于我们自己的“Walker”类从而改变菜单的输出结构。

打开你主题文件中的function.php文件,并添加如下代码:

class description_walker extends Walker_Nav_Menu {
    function start_el(&$output, $item, $depth, $args) {
        global $wp_query;
        $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
 
        $class_names = $value = '';
 
        $classes = empty( $item->classes ) ? array() : (array) $item->classes;
        $classes[] = 'menu-item-' . $item->ID;
 
        $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
        $class_names = ' class="' . esc_attr( $class_names ) . '"';
 
        $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args );
        $id = strlen( $id ) ? ' id="' . esc_attr( $id ) . '"' : '';
 
        $output .= $indent . '<li' . $id . $value . $class_names .'>';
 
        $prepend = '<strong>';
        $append = '</strong>';
        $description  = ! empty( $item->attr_title ) ? '<span>' . esc_attr( $item->attr_title ) . '</span>' : '';
 
        if($depth != 0) {
            $description = $append = $prepend = "";
            $attributes  = ! empty( $item->attr_title ) ? ' title="'  . esc_attr( $item->attr_title ) .'"' : '';
        }
        $attributes .= ! empty( $item->target )     ? ' target="' . esc_attr( $item->target     ) .'"' : '';
        $attributes .= ! empty( $item->xfn )        ? ' rel="'    . esc_attr( $item->xfn        ) .'"' : '';
        $attributes .= ! empty( $item->url )        ? ' href="'   . esc_attr( $item->url        ) .'"' : '';
 
        $item_output = $args->before;
        $item_output .= '<a'. $attributes .'>';
        $item_output .= $args->link_before . $prepend . apply_filters( 'the_title', $item->title, $item->ID ) . $append;
        $item_output .= $description . $args->link_after;
        $item_output .= '</a>';
        $item_output .= $args->after;
 
        $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
    }
}

那么这个类做了什么呢?这个类在WordPress默认的walker代码(位于wp-includes/nav-menu-template.php)基础上添加了几行代码。现在这个walker会检测是否是顶级菜单,如果是就会输出带有描述的菜单结构。

添加回调函数

现在我们创建了一个自定义的walker类,我们还要做的就是告诉WordPress去使用我们的walker替代默认的。这步非常简单,只要为 wp_nav_menu()添加walker参数即可:

<?php wp_nav_menu( array('walker' => new description_walker())); ?>

好了,最后为你的菜单添加CSS样式,一起来制作个性的导航菜单吧~

0
投稿

猜你喜欢

  • 今天Google Adsense的中文博客发布了一篇文章,详细地对于Google AdSense的各种推介政策进行了一些细节上的描述。我仔细
  • 添加一条新记录是通过RecordSet对象的Addnew方法实现的,还是通过执行SQL语句中的insert语句也可以添加新记录,为何不选用后
  • 垂直生活类搜索网站的出现,使互联网庞杂的生活类信息由粗糙变为精细。更能满足用户需求 随着互联网信息的 * 式增长,搜索到精准、有效信息的难度越
  • 前言对于Linux系统安全来说,日志文件是极其重要的工具。不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的
  • 虚拟系统"的意思是"假的系统",亦即当一个使用者使用的是"虚拟系统"时,他所看到的系统档案
  • 作为站长,您对论坛中会员的积分消费一定很熟悉。当会员对积分的需求增大,通过发帖、上传附件等增加积分的活动不能满足时,他还可以通过支付宝购买积
  • 如果您使用Linux,可千万要记得不要让傻孩子们敲入以下命令,尽管这些命令看上去相当复杂,但还是会对你的系统造成严重影响.有一些会影响你的程
  • 简介VLAN是网络栈的一个附加功能,且位于下两层。首先来学习Linux中网络栈下两层的实现,再去看如何把VLAN这个功能附加上去。下两层涉及
  • 我在电信局做网管,原来管理过三十多台服务器,从多年积累的经验,写出以下详细的Windows2003服务系统的安全方案,我应用以下方案,安全运
  • 解决网站收录问题是SEO的主要任务之一,我每天观察20多个站的收录情况,有些小小心得,下面和大家分享,特别针对百度收录。网站让百度收录有3道
  • 结合工作经验,在这里笔者给企业网管员提供一些保障企业网络安全的建议,帮助他们用以抵御网络入侵、恶意软件和垃圾邮件。定义用户完成相关任务的恰当
  • Docker简介Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Li
  • 相信大家用Dede架构网站的有很多吧,很多时候我们是直接复制一个templets\default文件夹修改掉名字来达到修改模版路径的目的,但
  • 本文实例讲述了CentOS 6.5平台实现快速部署FTP的方法。分享给大家供大家参考,具体如下:安装vsftpd(这里需要使用YUM,YUM
  • 两台运营着近4000个区域的 DNS Server 最近特别不正常,经常出现 DNS ID3000、ID9999的警告,并且辅助 DNS S
  • 前几天给一个客户做远程项目实施,客户那边的服务器是Windows OS的,我们这边的业务运行需要linux OS,所以就在Windows O
  • FTP(File Tranfer Protocol)是一种很古老的协议来的了,自unix始就一直有使用的了,FTP因为本身不但可以提供多用户
  • 博客广告的策略基本有两种形式:定向传播策略与交互传播策略。根据商业博客的不同特点,文案的写作要求也有所不同。一、定向传播的广告策略和文案写作
  • 1. 什么是PageRank 2. PageRank的决定因素 3. 如何查知PageRank 4. PageRank的重要性 5. Goo
  • 在备受业界关注的《互联网视听节目服务规定》 * 以来,“信息网络传播视听节目许可证”(下称“视频牌照”)的颁发就受到了业内的广泛关注。近日,广
手机版 网站运营 asp之家 www.aspxhome.com