我有一个基本上过滤课程查询的表单。表单有多个选项,但无论课程是否开放及其位置,我们都可以选择其中的2个。完全编程的查询如下所示:
$query = array(
'post_type' => 'courses',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'course_location',
'compare' => '=',
'value' => 'Birmingham',
),
array(
'key' => 'course_open',
'compare' => '=',
'value' => 1,
),
),
);
现在,当我使用表格时,这就是我的代码......
基本的查询开始
$query = array(
'post_type' => 'courses',
);
从表单添加位置:
if(isset($_GET['location']) && $_GET['location'] != '') {
$query['meta_query'] = array(
'relation' => 'AND',
array(
'key' => 'course_location',
'compare' => '=',
'value' => $_GET['location'],
),
);
}
如果课程开放则加入:
if(isset($_GET['open']) && $_GET['open'] != '') {
$query['meta_query'] = array(
'relation' => 'AND',
array(
'key' => 'course_open',
'compare' => '=',
'value' => $_GET['open'],
),
);
}
我遇到的问题是课程打开将替换查询中的课程位置。如果我只设置其中一个选项它完美地工作,我只需要继续添加查询,如果它在表单中设置。知道怎么做吗?
答案 0 :(得分:1)
解决了!
所以我将Open代码更改为:
if(isset($_GET['open']) && $_GET['open'] != '') {
$open =
array(
'key' => 'course_open',
'compare' => '=',
'value' => $_GET['open'],
);
}
位置:
if(isset($_GET['location']) && $_GET['location'] != '') {
$location = array(
'key' => 'course_location',
'compare' => '=',
'value' => $_GET['location'],
);
}
主要查询:
$query = array(
'post_type' => 'courses',
'meta_query' => array(
'relation' => 'AND',
$open,
$location,
),
);
答案 1 :(得分:0)
尝试以下代码:
$meta_query=array();
$meta_query['relation'] = 'AND';
if(isset($_GET['location']) && $_GET['location'] != '') {
$temp_arr = array();
$temp_arr['key'] = 'course_location';
$temp_arr['value'] = $_GET['location'];
$temp_arr['compare'] = '=';
$meta_query[] = $temp_arr;
}
if(isset($_GET['open']) && $_GET['open'] != '') {
$temp_arr = array();
$temp_arr['key'] = 'course_open';
$temp_arr['value'] = $_GET['open'];
$temp_arr['compare'] = '=';
$meta_query[] = $temp_arr;
}
$args = array(
'post_type' => 'post_type',
'meta_query' => $meta_query
);
在你的代码中,错误是当两个传递的参数都会覆盖另一个参数时。
希望这会有所帮助!