当前位置:  编程技术>php

php 修改wordpress导航菜单的方法

    来源: 互联网  发布时间:2014-10-10

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

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

首先,默认的输出结构:
 

代码示例:

 

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

代码示例:

 

准备工作

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

自定义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 . '';
 
        $prepend = '';
        $append = '';
        $description  = ! empty( $item->attr_title ) ? '' . esc_attr( $item->attr_title ) . '' : '';
 
        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 .= '';
        $item_output .= $args->link_before . $prepend . apply_filters( 'the_title', $item->title, $item->ID ) . $append;
        $item_output .= $description . $args->link_after;
        $item_output .= '';
        $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参数即可:
 

代码示例:

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


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • 如何修改PHP+Apache上传文件大小限制
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • linux + apache+php+mysql 修改那一行?
  • 修改php上传限制 修改phpmyadmin限制
  • 不能自动加载index.php文件的二种修改方法
  • PHP 修改时区设置的快速方法
  • 修改PHP上传文件大小限制
  • PHP 上传文件大小限制修改
  • nginx:413 Request Entity Too Large的处理办法--修改 PHP上传文件大小
  • win2000里开发的php+mysql程序,在bsd里不能删除修改,如何解决
  • 修改Nginx+PHP上传文件大小限制
  • apache+php上传文件大小限制修改方法
  • PHP修改session_id示例代码
  • php像数组一样存取和修改字符串字符
  • php.ini save_handler 修改不生效的解决办法
  • php获取文件的创建时间、修改时间的简单示例
  • PHP curl修改网站请求头
  • php通过ajax实现双击table修改内容
  • 修改PHP上传文件大小限制(windows、linux)
  • 修改PHP、MySQL时区设置实现主机时间同步
  • PHP 5.4.19 和 PHP 5.5.3 发布及下载地址
  • IIS7配置PHP图解(IIS7+PHP_5.2.17/PHP_5.3.5)
  • PHP去除html标签,php标记及css样式代码参考
  • php输入流php://input使用示例(php发送图片流到服务器)
  • PHP 'ext/soap/php_xml.c'不完整修复存在多个任意文件泄露漏洞
  • PHP转换器 HipHop for PHP
  • php通过socket_bind()设置IP地址代码示例
  • PHP 框架 Pop php
  • php安装完成后如何添加mysql扩展
  • 数据库 iis7站长之家


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3