ESSAY / NOTE

wordpress原创-强大的分类目录自动N级菜单并自动识别

一个小项目需要这个功能 就写出来了 分享一下 至于怎么实现自己分析下代码  这里还需要一个给分类目录自定义字段的插件 首先我把目录作为分级菜单 菜单是进去一个显示该级别下所有自菜单 一直循环 可是一直没有尽头 我们需要循环遍历是否到头了 该代码实现了如下功能 1、用分类目录当多级菜单 级别当然没有限制啦 你要是过火弄一百级都能完全掌控 2、自动识别是否达到了最后一个层级 达到了 自行设定use_nav 设置上一级的ID号即可 读取上一级的ID号作为该层级菜单 不会继续往下分层 3、自动识别该菜单(分类目录)的URL的输出 如果设定在nav_url自定义字段加URL 则给A标签赋予新的URL 如果没加则默认读取该字段的默认URL 思路1:识别URL是否自定义 自定义自定义显示 没自定义的自动显示URL <?php // $mylink = $wpdb->get_row("SELECT * FROM wp_termsmeta where meta_key='nav_url'", ARRAY_A); //$mylink对象的属性即SQL查询结果的行名称(即$wpdb->links表中的所有行)。 //var_dump($mylink); // echo $mylink->meta_value; // prints "10" $sql="SELECT terms_id FROM wp_termsmeta where meta_key='nav_url'"; $res=mysql_query($sql); $arr=array(); while($mylink=mysql_fetch_row($res)){ foreach($mylink as $key=>$val){ echo $val.$count; $arr[]=$val; echo "<br />"; } } mysql_free_result($res); echo "<br />";echo "<br />";echo "<br />"; var_dump($arr); global $wp_query; $cat_ID = get_query_var('cat'); //echo $cat_ID; ?> <ul><?php //判断ID输出分类目录 $categories=get_categories("hide_empty=0&title_li=&parent=".$cat_ID); foreach($categories as $category) { //当前ID $ziid=$category->term_id; //识别数据库倒出的数据到数组 $shibie=0; for($k=0;$k<count($arr);$k++){ //判断该ID是否是有自定义链接 有给shibie赋值1 反之0 if($ziid == $arr[$k]){ $shibie=1; } }echo '<br >'; echo $ziid.'-'.$shibie; //判断shibie的结果 如果为1则证明写了超链接需要显示超链接 如果没有则显示默认 if($shibie == 0){ echo '<br >';echo '<li><a name="sideli" href="'.get_category_link( $category->term_id ).'">'.$category->name. '</a></li>'; }else{ //返回0 自定义链接 if ( is_category() ) { if (function_exists('get_terms_meta')) { $metaValue = get_terms_meta($ziid, 'nav_url'); } } echo '<br >';echo '<li><a name="sideli" href="'.$metaValue[0].'">'.$category->name. '</a></li>'; } /*if($val = $ziid){ echo '<li><a name="sideli" href="'.get_category_link( $category->term_id ).'">'.$category->name. '</a></li>'; }else{ echo '<li><a name="sideli" href="'.get_category_link( $category->term_id ).'">'.$category->name. '</a></li>'; */ //判断 } ?> </ul> 思路2: 如果到头了 菜单识别的内容还要为该级上一级的菜单内容 那么我们就自定一下显示哪个ID下的所有子菜单 设定了自行设定 没设定的自动显示 <div class="sidenav"> <ul> <?php //菜单的输出 下面2个php global $wp_query; $cat_ID = get_query_var('cat'); ?> <ul><?php //判断使用其他ID的菜单 if ( is_category() ) { if (function_exists('get_terms_meta')) { $metaValue = get_terms_meta(get_query_var('cat'), 'use_nav'); } } //菜单ID判断 if($metaValue[0] == null){ $categories=get_categories("hide_empty=0&title_li=&parent=".$cat_ID); }else{ $categories=get_categories("hide_empty=0&title_li=&parent=".$metaValue[0]); } //菜单开始 $k=11; $imgurl= get_option('home'); foreach($categories as $category) { $k--; // echo '<li><a style="background:url('.$imgurl.'/wp-content/themes/sage/images/group/bgrayop/bgrayop'.$k.'.png) repeat scroll;" name="sideli" href="'.get_category_link( $category->term_id ).'">'.$category->name. '</a></li>'; } ?> </ul> </div> 经过思路1、2的整合发挥强大的功能 1、首页要安装wp-category-meta插件让分类目录可以自定义字段 2、使用插件建两个分类目录字段
use_nav text category
nav_url text category
3、将代码整合到你的代码里 该代码实现了如下功能 1、用分类目录当多级菜单 级别当然没有限制啦 你要是过火弄一百级都能完全掌控 2、自动识别是否达到了最后一个层级 达到了 自行设定use_nav 设置上一级的ID号即可 读取上一级的ID号作为该层级菜单 不会继续往下分层 3、自动识别该菜单(分类目录)的URL的输出 如果设定在nav_url自定义字段加URL 则给A标签赋予新的URL 如果没加则默认读取该字段的默认URL <div class="sidenav"> <ul> <?php $sql="SELECT terms_id FROM wp_termsmeta where meta_key='nav_url'"; $res=mysql_query($sql); $arr=array(); while($mylink=mysql_fetch_row($res)){ foreach($mylink as $key=>$val){ $arr[]=$val; } } mysql_free_result($res); global $wp_query; $cat_ID = get_query_var('cat'); //菜单的输出 下面2个php global $wp_query; $cat_ID = get_query_var('cat'); ?> <ul><?php //判断使用其他ID的菜单 if ( is_category() ) { if (function_exists('get_terms_meta')) { $metaValue = get_terms_meta(get_query_var('cat'), 'use_nav'); } } //菜单ID判断 if($metaValue[0] == null){ $categories=get_categories("hide_empty=0&title_li=&parent=".$cat_ID); }else{ $categories=get_categories("hide_empty=0&title_li=&parent=".$metaValue[0]); } //菜单开始 $kimg=11; $imgurl= get_option('home'); //菜单循环 foreach($categories as $category) { //K--是在循环那个opacity --$kimg; //当前ID $ziid=$category->term_id; //识别数据库倒出的数据到数组 $shibie=0; for($k=0;$k<count($arr);$k++){ //判断该ID是否是有自定义链接 有给shibie赋值1 反之0 if($ziid == $arr[$k]){ $shibie=1; } } // 输出测试 echo $ziid.'-'.$shibie.'-'.$kimg; // //判断shibie的结果 如果为1则证明写了超链接需要显示超链接 如果没有则显示默认 if($shibie == 0){ echo '<li><a style="background:url('.$imgurl.'/wp-content/themes/sage/images/group/bgrayop/bgrayop'.$kimg.'.png) repeat scroll;" name="sideli" href="'.get_category_link( $category->term_id ).'">'.$category->name. '</a></li>'; }else{ //返回0 自定义链接 if ( is_category() ) { if (function_exists('get_terms_meta')) { $metaValue = get_terms_meta($ziid, 'nav_url'); } } echo '<li><a style="background:url('.$imgurl.'/wp-content/themes/sage/images/group/bgrayop/bgrayop'.$kimg.'.png) repeat scroll;" name="sideli" href="'.$metaValue[0].'">'.$category->name. '</a></li>'; } } ?> </ul> </div>