对于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);
}
}
}
© 版权声明
THE END
暂无评论内容