5

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

 2 years ago
source link: https://www.huhexian.com/20396.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

2021-12-3014:00:05评论1604字

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

WordPress按自定义字段、分类、标签等多重筛选并排序下面我做一些简单的介绍:

假设文章有自定义字段:area 存放的是地区信息,比如重庆,比如北京等。另一个字段为type,存放类型。

  1. if(isset($_GET['cat'])) {
  2. $cat_name=$_GET['cat'];
  3. if(isset($_GET['tag']) ){
  4. $tag=$_GET['tag'];
  5. // 自定义字段:area
  6. if(isset($_GET['area']) ){
  7. $array_temp = array('key' => 'area', 'value'=>$_GET['area'], 'compare'=>'=');
  8. array_push($metaArray,$array_temp);
  9. // 自定义字段:type
  10. if(isset($_GET['type']) ){
  11. $array_temp = array('key' => 'type', 'value'=>$_GET['type'], 'compare'=>'=');
  12. array_push($metaArray,$array_temp);
  13. //正反顺序
  14. if(isset($_GET['order'])){
  15. $order=$_GET['order'];
  16. else $order = 'DESC';
  17. //默认按时间排序
  18. $orderby='date';
  19. //如果用户设置了按文章特定字段价排序
  20. if(isset($_GET['orderby'])){
  21. if($_GET['orderby'] == 'views'){
  22. $array_temp = array('key' => 'views');
  23. array_push($metaArray,$array_temp);
  24. $orderby='meta_value_num';
  25. else $orderby = $_GET['orderby']; //否则按wp自带排序字段
  26. //获取上述参数,组成查询条件
  27. $args = array(
  28. 'meta_query' => $metaArray,
  29. 'category_name' = >$cat_name,
  30. 'tag'= $tag_name,
  31. 'order' => $order,//DESC,
  32. 'orderby' => $orderby,
  33. //查询文章
  34. $query = new WP_Query( $args );
  1. <?php while ($query->have_posts()) : $query->the_post(); ?>
  2. <h1 class="post-name"><a href="<?php the_permalink(); ?>" ><?php the_title(); ?></a></h1>
  3. <?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等实现,但如果遇到需要自定义字段的区间筛选就歇菜了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK