wordpress 多条件筛选插件,wordpress 多重筛选,巧用自定义分类法,每个项目只能单选

演示效果http://www.gengu.org/tag/lol

本方法不需要自定义文章类型(模型).用系统自动的文章功能即可使用,修改简单实用.

比如我们要增加行业及分类两个自定义分类.

前台效果图

后台效果图,发表文章时,右下角会自动显示

一,在模板的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.360.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));

保存即可使用

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您提供一些创建类似Advanced Custom Fields的WordPress插件的指导。 首先,您需要了解WordPress插件的基本结构和如何创建它们。可以从WordPress官方网站上找到相关的文档和教程。 接下来,您需要决定插件的功能和设计。插件的主要功能是允许用户在后台创建和管理自定义字段。这意味着您需要创建一个界面,使用户能够创建新的自定义字段并指定它们的名称、类型和其他属性。 对于自定义字段的类型,您需要考虑哪些类型最适合您的插件。例如,如果您的插件是为博客文章创建的,您可能需要支持文本、日期、图片、文件等字段类型。如果您的插件是为电子商务网站创建的,您可能需要支持价格、SKU等字段类型。 创建自定义字段时,您需要考虑如何在WordPress主题中使用这些字段。这可以通过使用WordPress的内置函数来实现。例如,如果您创建了一个自定义字段来存储产品价格,您可以使用get_post_meta()函数来获取价格并在主题中显示它。 最后,您需要测试您的插件以确保它能够按预期工作。您可以在本地安装WordPress并使用它来测试插件。您还可以使用在线测试环境来测试插件的兼容性和性能。 希望这些指导能够帮助您创建一个类似Advanced Custom Fields的WordPress插件。如果您需要更多的帮助或指导,请随时提出问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值