
对于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); } } }
还没有评论,来说两句吧...