对于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
暂无评论内容