WordPress 文章多重字段筛选

最近模板兔给某个客户定制一个关于数据下载的wordpress模板,需要使用erphpdown收费下载插件,其中要实现这样一个页面:多字段筛选。

效果如下:(这里只列出3项自定义字段)

筛选界面代码如下:

<div class="filters">
 <div class="filter-item">
 数据标价:<a href="<?php echo add_query_arg("price","all",selfURL())?>" class="<?php if(!isset($_GET['price']) || $_GET['price'] == 'all') echo 'on';?>">全部</a> <a href="<?php echo add_query_arg("price","free",selfURL())?>" class="<?php if($_GET['price'] == 'free') echo 'on';?>">免费</a> <a href="<?php echo add_query_arg("price","fee",selfURL())?>" class="<?php if($_GET['price'] == 'fee') echo 'on';?>">付费</a>
 </div>
 <div class="filter-item">
 数据来源:<a href="<?php echo add_query_arg("from","all",selfURL())?>" class="<?php if(!isset($_GET['from']) || $_GET['from'] == 'all') echo 'on';?>">全部</a> <a href="<?php echo add_query_arg("from","data",selfURL())?>" class="<?php if($_GET['from'] == 'data') echo 'on';?>">引力数据</a> <a href="<?php echo add_query_arg("from","organization",selfURL())?>" class="<?php if($_GET['from'] == 'organization') echo 'on';?>">机构</a> <a href="<?php echo add_query_arg("from","internet",selfURL())?>" class="<?php if($_GET['from'] == 'internet') echo 'on';?>">互联网</a> <a href="<?php echo add_query_arg("from","personal",selfURL())?>" class="<?php if($_GET['from'] == 'personal') echo 'on';?>">个人</a>
 </div>
 <div class="filter-item">
 数据大小:<a href="<?php echo add_query_arg("size","0",selfURL())?>" class="<?php if(!isset($_GET['size']) || $_GET['size'] == '0') echo 'on';?>">全部</a> <a href="<?php echo add_query_arg("size","1",selfURL())?>" class="<?php if($_GET['size'] == '1') echo 'on';?>">100M以下</a> <a href="<?php echo add_query_arg("size","2",selfURL())?>" class="<?php if($_GET['size'] == '2') echo 'on';?>">100M-500M</a> <a href="<?php echo add_query_arg("size","3",selfURL())?>" class="<?php if($_GET['size'] == '3') echo 'on';?>">500M-1G</a> <a href="<?php echo add_query_arg("size","4",selfURL())?>" class="<?php if($_GET['size'] == '4') echo 'on';?>">1G以上</a>
 </div>
 </div>

筛选功能部分代码如下:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
 $metaArray = array(); //自定义字段数组by mobantu

if(isset($_GET['price'])){
 if($_GET['price'] == 'free'){
 $array_temp = array('key' => 'down_price', 'value'=>'0', 'compare'=>'=');
 array_push($metaArray,$array_temp);
 }elseif($_GET['price'] == 'fee'){
 $array_temp = array('key' => 'down_price', 'value'=>'0', 'compare'=>'>');
 array_push($metaArray,$array_temp);
 }
 }

if(isset($_GET['from'])){
 $array_temp = array('key' => 'down_from', 'value'=>$_GET['from'], 'compare'=>'=');
 array_push($metaArray,$array_temp);
 }

if(isset($_GET['size'])){
 if($_GET['size'] == '1'){
 $array_temp = array('key' => 'down_size', 'value'=>'100', 'type' => 'numeric', 'compare'=>'<'); 
 array_push($metaArray,$array_temp);
 }if($_GET['size'] == '2'){
 $array_temp = array('key' => 'down_size', 'value'=>array( 100, 500 ), 'type' => 'numeric', 'compare'=>'BETWEEN'); 
 array_push($metaArray,$array_temp);
 }
 }


 $args = array(
 'order' => DESC,
 'caller_get_posts' => 1,
 'meta_query' => $metaArray,
 'paged' => $paged
 );

query_posts($args);

看了我的代码,相信你脑洞大开,妈妈再也不用担心你的多重筛选了~~

 

另外,之前也给另一个客户基于Mohtml主题开发了一个评分的功能,弄了一个评分筛选小工具,小工具选项:

部分代码如下,没有上面的代码方便,不过也可以参考:

$order = "DESC";
 $orderby = 'date';
 $meta_key = '';

if($review_order == 'review_desc'){
 $orderby = 'meta_value_num';
 $meta_key = 'review_'.$show_style;

}elseif($review_order == 'review_asc'){
 $order = 'ASC';
 $orderby = 'meta_value_num';
 $meta_key = 'review_'.$show_style;

}elseif($review_order == 'date_asc'){
 $order = 'ASC';
 }elseif($review_order == 'random'){
 $orderby = 'rand';
 }

if($show_date == '7'){
 $args = array(
 'order' => $order,
 'orderby' => $orderby,
 'meta_key' => $meta_key,
 'meta_query' => array(
 array('key'=>'review_type','value'=>$type, 'compare'=>'IN'),
 ),
 'date_query' => array(
 array(
 'after' => '1 week ago'
 )
 ),
 'showposts' => $limit,
 'caller_get_posts' => 1
 );
 }elseif($show_date == '30'){
 $args = array(
 'order' => $order,
 'orderby' => $orderby,
 'meta_key' => $meta_key,
 'meta_query' => array(
 array('key'=>'review_type','value'=>$type, 'compare'=>'IN'),
 ),
 'date_query' => array(
 array(
 'after' => '1 month ago'
 )
 ),
 'showposts' => $limit,
 'caller_get_posts' => 1
 );
 }elseif($show_date == '183'){
 $args = array(
 'order' => $order,
 'orderby' => $orderby,
 'meta_key' => $meta_key,
 'meta_query' => array(
 array('key'=>'review_type','value'=>$type, 'compare'=>'IN'),
 ),
 'date_query' => array(
 array(
 'after' => '6 month ago'
 )
 ),
 'showposts' => $limit,
 'caller_get_posts' => 1
 );
 }elseif($show_date == '30'){
 $args = array(
 'order' => $order,
 'orderby' => $orderby,
 'meta_key' => $meta_key,
 'meta_query' => array(
 array('key'=>'review_type','value'=>$type, 'compare'=>'IN'),
 ),
 'date_query' => array(
 array(
 'after' => '1 year ago'
 )
 ),
 'showposts' => $limit,
 'caller_get_posts' => 1
 );
 }else{
 $args = array(
 'order' => $order,
 'orderby' => $orderby,
 'meta_key' => $meta_key,
 'meta_query' => array(
 array('key'=>'review_type','value'=>$type, 'compare'=>'IN'),
 ),
 'showposts' => $limit,
 'caller_get_posts' => 1
 );
 }
 query_posts($args);