大家早上好。
我有点绞尽脑汁,因为它不应该那么困难。
我的WP后端有一个自定义表单,它需要用户选择的元值来查询数据并返回结果。这一切都是通过AJAX发送和接收的。我希望用户能够通过一个字段或两个字段进行查询。正如您所注意到的,AND和OR运算符对我不起作用。我想我正在寻找一种AND / OR方法。
//get the posted values from the search fields
$clientname = ($_POST['clientname']);
$apartmentname = ($_POST['apartmentname']);
$date1 = ($_POST['date1']);
$date2 = ($_POST['date2']);
//set the dates up properly
$datetime1 = new DateTime($date1);
$datetime2 = new DateTime($date2);
//get bookings between two dates and by either client name
or apartment name or both...
$args = array(
'post_type' => 'bookings',
'meta_query' => array(
'relation' => 'IN',
array(
'key' => 'clientname',
'value' => $clientname,
),
array(
'key' => 'apartmentname',
'value' => $apartmentname,
'compare' => array('', $apartmentname),
),
),
'date_query' => array(
array(
'after' => $date1,
'before' => $date2,
),
),
);
显然IN方法不起作用,日期查询工作正常。重点是列出某个客户的所有预订(邮寄类型),某个公寓的所有预订,或某个公寓中某个客户的所有预订。
您的想法将不胜感激。
由于
答案 0 :(得分:0)
我认为如果您查看Wordpress文档,您会发现代码中出现错误:https://codex.wordpress.org/Class_Reference/WP_Query
具体而言 - 在您用于查询的参数中,“关系”只能具有值“AND”/“OR”。您目前正在使用“IN”,我认为这是无效的。该关系确定查询是否需要匹配下面的所有数组,或者只是一个或多个数组。因此,在您的情况下,如果要按客户端名称和公寓名称进行过滤,则需要将其设置为AND;如果您只想通过与其中任何一个匹配进行过滤,则需要将其设置为OR。
例如,您可以尝试以下内容:
$args = array(
'post_type' => 'bookings',
'meta_query' => array(
),
'date_query' => array(
array(
'after' => $date1,
'before' => $date2,
),
),
);
if( isset($clientname) && isset($apartmentname) ){
$args['meta_query']['relation'] = 'AND';
}
if(isset($clientname)){
$args['meta_query'][] = array(
'key' => 'clientname',
'value' => $clientname,
);
}
if(isset($apartmentname)){
$args['meta_query'][] = array(
'key' => 'apartmentname',
'value' => $apartmentname,
'compare' => array('', $apartmentname),
);
}