三、增加可查询变量
前台输出地址和等下后台都要用到从url中获取参数,都使用了get_query_var这个函数,不过这个函数获取参数还需要将你要查询的变量加入到“公共可查询变量中”,这个我也不知道怎么翻译。
使用如下代码使得area和season两个参数可用(在functions.php文件中加入如下代码)。
function ashu_query_vars($public_query_vars) {
$public_query_vars[] = 'area';
$public_query_vars[] = 'season';
return $public_query_vars;
}
add_action('query_vars', 'ashu_query_vars');
当然,你也可以使用$_GET方法来获取变量。
四、按条件输出文章
有了前面三步,至少在前台显示的url是可以正常工作。
第四步也就是最后一步,让前台的文章输出我们想要的。
要点:1. 使用pre_get_posts钩子来改变文章查询的参数 2. 如何使用自定义字段查询文章。
(在functions.php文件中加入如下代码)
add_action('pre_get_posts','ashuwp_custom_posts_per_page'); //使用pre_get_posts钩子来改变查询文章的参数
function ashuwp_custom_posts_per_page($query){
//范例中的页面是destination的归档页面,所以使用is_post_type_archive来判断页面
if(is_post_type_archive('destination') && $query->is_main_query() && !is_admin()){
$relation = 0; //用来计数有几个参数
$area_sort = get_query_var('area'); //获取地域参数
$season_sort = get_query_var('season'); //获取季节参数
$meta_query = array(
'relation' => 'OR',
);
//判断季节是否合法,此处就不需要all了,因为all就是所有
if(in_array($season_sort,array('spring','summer','autumn','winter'))){
$meta_query[] = array(
'key'=>'destination_season', //自定义字段的名称
'value'=> $season_sort,
'compare'=>'LIKE', //因为自定义字段值可能保存为数组,所以按字段查询文章时使用LIKE
);
$relation++;
}
//判断地域是否合法
if(in_array($area_sort,array('center','east','west','south','center'))){
$meta_query[] = array(
'key'=>'destination_location',
'value'=> $area_sort,
'compare'=>'LIKE',
);
$relation++;
}
//如果有两个参数,relation要设置为AND,即两个条件都要满足
if($relation){
if($relation==2){
$meta_query['relation'] = 'AND';
}
$query->set('meta_query',$meta_query);
}
}
}
1 2

