开门见山,WordPress要实现文章多重筛选的核心函数就是wp_query( ),有php基础的,直接看官方文档应该就能解决标题所提到的WordPress多重筛选功能了。效果图实例:
假设文章有自定义字段: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 the_permalink(); ?>" ><?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 ) );
上述方法是WordPress实现多重筛选最优质的思路,因为全部都是通过官方函数提供的功能实现的。网上其他有一些方法,比如通过多个tag等实现,但如果遇到需要自定义字段的区间筛选就歇菜了。