WordPress多重筛选并排序(按自定义字段、分类、标签等)

        开门见山,WordPress要实现文章多重筛选的核心函数就是wp_query( ),有php基础的,直接看官方文档应该就能解决标题所提到的WordPress多重筛选功能了。效果图实例:

WordPress多重筛选并排序(按自定义字段、分类、标签等)  第1张

        下面我做一些简单的介绍: 假设文章有自定义字段

area 存放的是地区信息,比如重庆,比如北京等。另一个字段为type,存放类型。

// 分类
if(isset($_GET['cat'])) {
$cat_name=$_GET['cat'];
}
// 标签
if(isset($_GET['tag']) ){
$tag=$_GET['tag'];
}
// 自定义字段:area
if(isset($_GET['area']) ){
$array_temp = array('key' => 'area', 'value'=>$_GET['area'], 'compare'=>'=');
array_push($metaArray,$array_temp);
}
// 自定义字段:type
if(isset($_GET['type']) ){
$array_temp = array('key' => 'type', 'value'=>$_GET['type'], 'compare'=>'=');
array_push($metaArray,$array_temp);
}
//正反顺序
if(isset($_GET['order'])){
$order=$_GET['order'];
}
else $order = 'DESC';
//默认按时间排序
$orderby='date';
//如果用户设置了按文章特定字段价排序
if(isset($_GET['orderby'])){
if($_GET['orderby'] == 'views'){
$array_temp = array('key' => 'views');
array_push($metaArray,$array_temp);
$orderby='meta_value_num';
}
else $orderby = $_GET['orderby']; //否则按wp自带排序字段
}
//获取上述参数,组成查询条件
$args = array(
'meta_query' => $metaArray,
'category_name' = >$cat_name,
'tag'= $tag_name,
'order' => $order,//DESC,
'orderby' => $orderby,
);
//查询文章
$query = new WP_Query( $args );
<?php while ($query->have_posts()) : $query->the_post(); ?>
<h1 class="post-name"><a href="<?php%20the_permalink();%20?>" ><?php the_title(); ?></a></h1>
<?php endwhile; ?>
// 分类
if(isset($_GET['cat'])) {
   $cat_name=$_GET['cat'];
 }
//  标签
if(isset($_GET['tag']) ){
   $tag=$_GET['tag'];
 }
// 自定义字段:area
if(isset($_GET['area']) ){
   $array_temp = array('key' => 'area', 'value'=>$_GET['area'], 'compare'=>'=');
   array_push($metaArray,$array_temp);
 }
 
 // 自定义字段:type
if(isset($_GET['type']) ){
   $array_temp = array('key' => 'type', 'value'=>$_GET['type'], 'compare'=>'=');
   array_push($metaArray,$array_temp);
 }
//正反顺序
if(isset($_GET['order'])){
  $order=$_GET['order'];
}
else $order = 'DESC';
//默认按时间排序
$orderby='date';
//如果用户设置了按文章特定字段价排序
if(isset($_GET['orderby'])){
  if($_GET['orderby'] == 'views'){
  $array_temp = array('key' => 'views');
   array_push($metaArray,$array_temp);
   $orderby='meta_value_num';
        }
    else $orderby = $_GET['orderby']; //否则按wp自带排序字段
}
//获取上述参数,组成查询条件
$args = array(
  'meta_query' => $metaArray,
         'category_name' = >$cat_name,
         'tag'= $tag_name,
  'order' => $order,//DESC,
  'orderby' => $orderby,
 );
//查询文章
 $query = new WP_Query( $args );
 
 <?php while ($query->have_posts()) : $query->the_post(); ?>
<h1 class="post-name"><a href="<?php%20the_permalink();%20?>" ><?php the_title(); ?></a></h1>
<?php endwhile; ?>
// 分类 if(isset($_GET['cat'])) { $cat_name=$_GET['cat']; } // 标签 if(isset($_GET['tag']) ){ $tag=$_GET['tag']; } // 自定义字段:area if(isset($_GET['area']) ){ $array_temp = array('key' => 'area', 'value'=>$_GET['area'], 'compare'=>'='); array_push($metaArray,$array_temp); } // 自定义字段:type if(isset($_GET['type']) ){ $array_temp = array('key' => 'type', 'value'=>$_GET['type'], 'compare'=>'='); array_push($metaArray,$array_temp); } //正反顺序 if(isset($_GET['order'])){ $order=$_GET['order']; } else $order = 'DESC'; //默认按时间排序 $orderby='date'; //如果用户设置了按文章特定字段价排序 if(isset($_GET['orderby'])){ if($_GET['orderby'] == 'views'){ $array_temp = array('key' => 'views'); array_push($metaArray,$array_temp); $orderby='meta_value_num'; } else $orderby = $_GET['orderby']; //否则按wp自带排序字段 } //获取上述参数,组成查询条件 $args = array( 'meta_query' => $metaArray, 'category_name' = >$cat_name, 'tag'= $tag_name, 'order' => $order,//DESC, 'orderby' => $orderby, ); //查询文章 $query = new WP_Query( $args ); <?php while ($query->have_posts()) : $query->the_post(); ?> <h1 class="post-name"><a href="<?php%20the_permalink();%20?>" ><?php the_title(); ?></a></h1> <?php endwhile; ?>

        我这里只设置输出了标题。大意就是如此。通过上面的代码,就可以实现,标签,分类,和area 和type四个条件的多重筛选。

        $_GET[‘cat’])这是指从网址中获取的值,比如?area=重庆&cat=food&tag=good&type=xxx&orderby=modified则获取的是,重庆地区,分类为food,标签为good,类型为xxxx的文章,并按修改时间排序。

        为了方便通过点击自动生成上述链接,你可能需要了解一下:add_query_arg() 和 remove_query_arg() 这两个函数。如果多重筛选需要分页,你可能需要 WP-PageNavi这个插件配合上面的代码使用

wp_pagenavi( array( 'query' => $query ) );
wp_pagenavi( array( 'query' => $query ) );
wp_pagenavi( array( 'query' => $query ) );

        上述方法是WordPress实现多重筛选最优质的思路,因为全部都是通过官方函数提供的功能实现的。网上其他有一些方法,比如通过多个tag等实现,但如果遇到需要自定义字段的区间筛选就歇菜了。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
Sometimes you have to be your own hero.
有时候必须做自己的英雄
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容