【转载】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);
}
}
}
//文章筛选代码
//通过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);
    }
  }
}
//文章筛选代码 //通过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); } } }
© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
Fight for the things you love no matter what you may face, it will be worth it.
不管你面对的是什么,为你所爱的而奋斗都会是值得的
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

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

    暂无评论内容