我有很多贴子都有促销价格,其余的都有确切的价格。我只是想确保如果存在促销价格,当我尝试提交输入范围中的值时,使用促销价格作为目标数据,否则使用实际价格。
在我的表格中,我有一个滑块:
<input class="price-select" name="price" value="5000" type="range" min="0" max="5000">
我的查询是这样的,但不起作用。
$args = [
\'posts_per_page\' => -1,
\'post_status\' => \'publish\',
\'meta_query\' => []
];
if (isset($date)) {...}
if (isset($destination)) {...}
if (isset($price)) {
array_push($args[\'meta_query\'], [
\'key\' => \'promotion_price\',
\'value\' => $price,
\'type\' => \'numeric\',
\'compare\' => \'<=\',
]);
array_push($args[\'meta_query\'], [
\'key\' => \'exact_price\',
\'value\' => $price,
\'type\' => \'numeric\',
\'compare\' => \'<=\',
]);
}
$getPackages = new WP_Query( $args );
这一个很好,但它不符合我的要求,因为我想不出任何解决方案。
我试过使用BETWEEN
和IN
但它不起作用。我不确定在这种情况下它是如何工作的。
Adding more information:
我有很多搜索过滤器,我添加它们的方式是使用
array_push
. 我尝试执行下面的代码,但它会影响其他搜索筛选器,并返回空。尝试执行
\'relation\' => \'OR\'
, 它适用于其他搜索过滤器,但价格和促销价格不起作用。
$args = [
\'posts_per_page\' => -1,
\'post_status\' => \'publish\',
\'meta_query\' => [
\'relation\' => \'AND\'
]
];
任何想法都将不胜感激!谢谢
阵列转储自$args
上没有关系meta_query
array(6) {
["post_type"]=>
string(15) "post"
["posts_per_page"]=>
int(4)
["post_status"]=>
string(7) "publish"
["tax_query"]=>
array(0) {
}
["meta_query"]=>
array(2) {
[0]=>
array(4) {
["key"]=>
string(34) "promotion_price"
["value"]=>
string(3) "439"
["type"]=>
string(7) "numeric"
["compare"]=>
string(2) "<="
}
[1]=>
array(4) {
["key"]=>
string(24) "exact_price"
["value"]=>
string(3) "439"
["type"]=>
string(7) "numeric"
["compare"]=>
string(2) "<="
}
}
["paged"]=>
int(1)
}
关系打开时
meta_query
array(6) {
["post_type"]=>
string(15) "post"
["posts_per_page"]=>
int(4)
["post_status"]=>
string(7) "publish"
["tax_query"]=>
array(0) {
}
["meta_query"]=>
array(3) {
["relation"]=>
string(2) "OR"
[0]=>
array(4) {
["key"]=>
string(34) "promotion_price"
["value"]=>
string(3) "456"
["type"]=>
string(7) "numeric"
["compare"]=>
string(2) "<="
}
[1]=>
array(4) {
["key"]=>
string(24) "exact_price"
["value"]=>
string(3) "456"
["type"]=>
string(7) "numeric"
["compare"]=>
string(2) "<="
}
}
["paged"]=>
int(1)
}
我的所有数组参数和搜索筛选器:
$args = [
\'post_type\' => \'post\',
\'posts_per_page\' => 4,
\'post_status\' => \'publish\',
\'tax_query\' => [],
\'meta_query\' => [],
\'paged\' => 1
];
if (isset($dates)) {
array_push($args[\'meta_query\'], [
\'key\' => \'dates\',
\'compare\' => \'IN\',
\'value\' => $dates,
]);
}
if (isset($price)) {
array_push($args[\'meta_query\'], [
\'key\' => \'promotion_price\',
\'value\' => $price,
\'type\' => \'numeric\',
\'compare\' => \'<=\',
]);
array_push($args[\'meta_query\'], [
\'key\' => \'exact_price\',
\'value\' => $price,
\'type\' => \'numeric\',
\'compare\' => \'<=\',
]);
}
if (isset($packages)) {
foreach ($packages as $package) {
array_push($args[\'tax_query\'], [
\'taxonomy\' => \'tax_1\',
\'field\' => \'term_id\',
\'terms\' => $package,
]);
}
}
if (isset($durations)) {
foreach ($durations as $duration) {
array_push($args[\'tax_query\'], [
\'taxonomy\' => \'tax_2\',
\'field\' => \'term_id\',
\'terms\' => $duration,
]);
}
}
if (isset($departures)) {
foreach ($departures as $departure) {
array_push($args[\'tax_query\'], [
\'taxonomy\' => \'tax_3\',
\'field\' => \'term_id\',
\'terms\' => $departure,
]);
}
}
$getPackages = new WP_Query( $args );
最合适的回答,由SO网友:Álvaro Franz 整理而成
为了使用两个或多个需要有关系的不同元字段,必须为relation
钥匙通过这种方式,您可以建立元字段必须满足的关系。
在您的特定情况下,您可以使用关系AND
确保$price
大于或等于促销价格,但也低于或等于确切价格。
所以根据你的问题;搜索筛选器between 促销和确切价格”;你的meta_query
数组将类似于:
\'meta_query\' => array(
\'relation\' => \'AND\',
array(
\'key\' => \'promotion_price\',
\'value\' => $price,
\'compare\' => \'>=\',
\'type\' => \'NUMERIC\'
),
array(
\'key\' => \'exact_price\',
\'value\' => $price,
\'compare\' => \'<=\',
\'type\' => \'NUMERIC\'
)
),
摘录自
WP Meta Query 文档:
您可以选择通过relation
键并将其设置为或和。当存在多个元查询时,它定义了关系(是应该满足所有条件,还是至少需要满足其中一个条件)
使用多个嵌套的元查询,还可以嵌套具有多个关系键的多个元查询。因此,可以创建不同的条件块。例如,到ignore 这个promotion_price
键(如果不存在),但如果存在,则使用它:
\'meta_query\' => array(
\'relation\' => \'OR\',
array(
\'relation\' => \'AND\',
array(
\'key\' => \'promotion_price\',
\'compare\' => \'NOT EXISTS\'
),
array(
\'key\' => \'exact_price\',
\'value\' => $price,
\'compare\' => \'<=\',
\'type\' => \'NUMERIC\',
),
),
array(
\'relation\' => \'AND\',
array(
\'key\' => \'promotion_price\',
\'value\' => $price,
\'compare\' => \'>=\',
\'type\' => \'NUMERIC\'
),
array(
\'key\' => \'exact_price\',
\'value\' => $price,
\'compare\' => \'<=\',
\'type\' => \'NUMERIC\'
),
)
),
如果有更多的条件句,可以继续按照相同的结构嵌套它们。在每个级别上,您都会有一个
\'relation\' => \'OR/AND\'
具有两个或多个阵列。