【转载】wordpress自定义多重筛选功能通过代码实现的方法(实例)

        对于wordpress的很多用户来说,多重筛选功能对于一些商城或是产品项目页等有很重要的意义.如果通过插件来实现,看起来容易,但无疑会大大降低网站的响应速率,同时,降低了用户体验.对搜索引擎的抓取来说,也是不利的.

        本实例就是完全通过代码来实现wordpress的多重筛选功能.

//文章筛选代码
//通过pre_get_posts钩子筛选
add_action('pre_get_posts', 'ashuwp_sift_posts_per_page');
function ashuwp_sift_posts_per_page($query)
{
  //is_category()即为分类页面有效,自行更换。
  //$query->is_main_query()使得仅对默认的页面主查询有效
  //!is_admin()避免影响后台文章列表
  if (is_category() && $query->is_main_query() && !is_admin()) {
    $sift_array = ashuwp_get_sift_array(); //获取筛选数组
    //从筛选数组中获取筛选的有效值值
    /*例如类型的值
* $genre_keys = array( 'love', 'literary', 'action', 'war', 'other');
*/
    $Course_Stage_keys = array_keys($sift_array['Course_Stage']); //阶段
    $Course_type_keys = array_keys($sift_array['Course_type']); //类型
    $Course_sort_keys = array_keys($sift_array['Course_sort']); //排序
    $relation = 0; //用于计数筛选项目数
    //从url中获取要筛选的参数,放入数组中
    $sift_vars = array();
    $sift_vars['Course_Stage'] = get_query_var('Course_Stage'); //从url获取类型
    $sift_vars['Course_type'] = get_query_var('Course_type');
    $sift_vars['Course_sort'] = get_query_var('Course_sort');
    $meta_query = array(
      'relation' => 'OR',
    );
    //判断类型是否合法,即是否存在于我们的配置数组中
    //将筛选参数加入带
    if (in_array($sift_vars['Course_Stage'], $Course_Stage_keys)) {
      $meta_query[] = array(
        'key' => 'Course_Stage',
        'value' => $sift_vars['Course_Stage'],
        'compare' => 'LIKE', //使用LIKE匹配可适应多选
      );
      $relation++;
    }
    //判断类型是否合法
    if (in_array($sift_vars['Course_type'], $Course_type_keys)) {
      $meta_query[] = array(
        'key' => 'Course_type',
        'value' => $sift_vars['Course_type'],
        'compare' => 'LIKE',
      );
      $relation++;
    }
    //判断排序是否合法
    if (in_array($sift_vars['Course_sort'], $Course_sort_keys)) {
      $meta_query[] = array(
        'key' => 'Course_sort',
        'value' => $sift_vars['Course_sort'],
        'compare' => 'LIKE',
      );
      $relation++;
    }
    if ($relation) {
      //若大于两个筛选
      if ($relation >= 2) {
        $meta_query['relation'] = 'AND'; //多项筛选同时满足
      }
      $query->set('meta_query', $meta_query);
    }
  }
}
© 版权声明
WWW.ANXKJ.TOP
喜欢就支持一下吧
点赞8 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容