本方法不需要自定义文章类型(模型).用系统自动的文章功能即可使用,修改简单实用.
比如我们要增加行业及分类两个自定义分类.
前台效果图
后台效果图,发表文章时,右下角会自动显示
一,在模板的functions.php中的最底部,php结束标签前面,添加如下代码
//自定义文章类型 // 搜索关键字 register_taxonomy add_action( 'init', 'create_hangye' );//wordpress初始化 function create_hangye() { $labels = array( 'name' => _x( '产品行业筛选', '产品应用的行业选项' ), 'singular_name' => _x( 'hangye', '行业名称' ), 'search_items' => __( '行业搜索' ), 'all_items' => __( '全部行业' ), 'edit_item' => __( '修改标签' ), 'update_item' => __( '更新标签' ), 'add_new_item' => __( '增加新的行业标签' ), 'new_item_name' => __( '新行业名字' ), ); register_taxonomy('hangye','post',array( 'hierarchical' => True, 'labels' => $labels )); } add_action( 'init', 'create_mycats' );//<span style="color: rgb(85, 85, 85); font-family: 'Microsoft Yahei'; font-size: 15px; line-height: 25px;">wordpress初始化</span> function create_mycats() { $labels = array( 'name' => _x( '产品分类筛选', '筛选' ), 'singular_name' => _x( 'mycats', 'taxonomy singular name' ), 'search_items' => __( '产品分类搜索' ), 'all_items' => __( '全部产品分类' ), 'edit_item' => __( '修改标签' ), 'update_item' => __( '更新标签' ), 'add_new_item' => __( '增加新的产品分类标签' ), 'new_item_name' => __( '新产品分类名字' ), ); register_taxonomy('mycats','post',array( 'hierarchical' => True, 'labels' => $labels )); }
其中,register_taxonomy为自定义分类的注册函数,系统自带的.
‘hierarchical’ => True表示后台发表文章时,自定义选项为复选框的形式.直接打勾即可.而不是手工填写.其它参数网上搜索查看吧
修改后,上传,后台即可看到效果.如图,然后进去增加选项即可.
二,顶级分类模板上,循环调用子分类.及子分类下的部分文章
假如要在分类编号为3的顶级分类上使用本插件,则在模板目录中.建立category-3.php这个模板,里面内容,可参考以下代码
<div class="box filter"> <br/> <p class="tagfilter" id="hangye"<?php if($_GET['hangye']!=''){echo ' data="'.$_GET["hangye"].'"';}?>><b>行业:</b> <?php $terms = get_terms("hangye"); $count = count($terms); if ( $count > 0 ){ foreach ( $terms as $term ) { if(strtolower(urlencode($_GET['hangye']))==$term->slug){ echo '<a data="'. $term->slug .'" style="border-color: orange;">' . $term->name . '</a>'; }else{ echo '<a style="margin-right:10px"data="'. $term->slug .'">' . $term->name . '</a>'; } } } ?></p> <p class="tagfilter" id="mycats" <?php if($_GET['mycats']!=''){echo ' data="'.$_GET["mycats"].'"';}?>><b>分类:</b> <?php $terms = get_terms("mycats"); $count = count($terms); if ( $count > 0 ){ foreach ( $terms as $term ) { if(strtolower(urlencode($_GET['mycats']))==$term->slug){ echo '<a data="'. $term->slug .'" style="border-color: orange;">' . $term->name . '</a>'; }else{ echo '<a style="margin-right:10px"data="'. $term->slug .'">' . $term->name . '</a>'; } } } ?> </p> <p style="margin-left:40px"><button id="filterSub" >点击筛选</button></p> </div> </pre><pre code_snippet_id="1848920" snippet_file_name="blog_20160824_2_2283605" name="code" class="php"> <!--container--> <div id="container"> <div class="mainbound body"> <div class="products_container" style="padding-top:10px;"> <div id="products_fluid_row1" class="products_fluid_row"> <?php $i = 0; // 仅为奇偶项 class 作准备 $categories = get_categories('child_of='. $cat .'&depth=0&hide_empty=0&orderby=id&order=asc');// 找出其所有子分类,并按ID号升序排列,其实这里还可以使用数组array(8,9,11,12)输出指定id的分类。 $num=8;//指定每次循环输出的文章篇数 foreach ($categories as $category) { // 开始循环子分类 $now_cat = $category->term_id; // 子分类ID //$cat_name = $category->cat_name; // 子分类名称 ?> <?php $posts = query_posts("&cat={$now_cat}&orderby=date&showposts={$num}" ); ?> <div class="products_fluid_head"> <div class="products_fluid_name_new"> <strong><?php single_cat_title(); ?></strong><!--其实这里用single_cat_title()和用变量$cat_name都可以了--> <a href="<?php echo get_category_link($category); ?>"style="float:right;font-weight:normal" target="_blank">More>></a> </div> </div> <div class="prod_row_new"> <?php while(have_posts()) : the_post(); ?> <div class="prod_col_new left "> <div class="prod_img_new"> <?php if ( has_post_thumbnail() ) { ?> <?php the_post_thumbnail(); ?> <?php } else {?> <img src="<?php bloginfo('template_url'); ?>/images/xxx.jpg" /> <?php } ?> </div> <div class="prod_type_new"><a href="<?php the_permalink(); ?>" target="_blank"><?php the_title(); ?></a></div> <div class="prod_name_new"><a href="<?php the_permalink(); ?>" target="_blank"><?php the_title(); ?></a></div> </div> <?php endwhile; ?> </div> <?php $i++; }//$i实现递增?> </div><!--products_fluid_row--> </div> </div> </div><!--container-->
注意, 模板中筛选需要通过js实用,代码直接加在模板中
<script> $('.tagfilter a').click(function() { var papaDate = $(this).parent('.tagfilter').attr('data'); $(this).parent('.tagfilter').find('a').css('borderColor', ''); if(papaDate == undefined | papaDate == "" | papaDate != $(this).attr('data')) { $(this).css('borderColor', 'orange').parent('.tagfilter').attr('data', $(this).attr('data')); } else if(papaDate == $(this).attr('data')) { $(this).css('borderColor', '').parent('.tagfilter').attr('data', ''); } else { $(this).css('borderColor', '').parent('.tagfilter').attr('data', ''); } }); $('#filterSub').click(function() { var urlNow = 'http://' + window.location.host + '/?'; var url = urlNow; var hangye = $('#hangye').attr('data'); var mycats = $('#mycats').attr('data'); var tag = $('#tag').attr('data'); if(typeof(hangye) != 'undefined') { if(hangye.length > 0) { url += 'hangye=' + hangye; } } if(typeof(mycats) != 'undefined') { if(url.substr(-1) != '?') { url += '&'; } if(mycats.length > 0) { url += 'mycats=' + mycats; } } if(typeof(tag) != 'undefined') { if(url.substr(-1) != '?') { url += '&'; } if(tag.length > 0) { url += 'tag=' + tag; } } if(urlNow != url) { window.location.href = url; } }) </script>
三,搜索结束页模板.
结束页默认使用archive.php归档模板.如果要使用专用模板.必须新建立一个名为taxonomy.php的新模板.里面内容参考.
<?php get_header(); ?> <div class="prod_row_new"> <?php while (have_posts()) : the_post(); ?> <div class="prod_col_new left "> <div class="prod_img_new"><a href="<?php the_permalink(); ?>" title="TD350"><?php if ( has_post_thumbnail() ) { ?> <?php the_post_thumbnail('full'); ?> <?php } else {?> <img src="<?php echo catch_that_image() ?>" alt="<?php the_title(); ?>"/> <?php } ?></a></div> <div class="prod_type_new"><a href="<?php the_permalink(); ?>" title="TD350"><?php the_title(); ?></a></div> <div class="prod_name_new"><a href="<?php the_permalink(); ?>" title="TD350"><?php the_title(); ?></a></div> </div> <?php endwhile; ?> </div> <?php get_footer(); ?>
如果要为其中一个分类法定义一个专用模板.比如行业模板.可以建立一个taxonomy-hangye.php.模板即可.
四.搜索结束的链接优化.
如果想用http://www.ys720.com/color/red这种形式的链接来显示,那就需要重新制作一个对应自定义分类的页面来展示。
这里我们使用tag的展现方式(这里以twentytwelve为例)
首先我们复制一份tag.php文件,重新命名为taxonomy-color.php(color为我们之前命名的分类名)。
在get_header(); ?>下方添加代码
<?php $term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); ?>把
<h1 class="archive-title"><?php printf( __( 'Tag Archives: %s', 'twentytwelve' ), '<span>' . single_tag_title( '', false ) . '</span>' ); ?></h1>
替换为
<h1 class="archive-title"><?php printf( __( 'Tag Archives: %s', 'twentytwelve' ), '<span>' . $term->name . '</span>' ); ?></h1>
在
while ( have_posts() ) : the_post();
的下面添加
query_posts(array( 'post_type'=>'post', 'color'=>$term->slug));