我正在构建一个高级搜索表单,它允许我通过不同的参数进行搜索。目前,按分类法进行搜索效果良好。我的问题是试图设置搜索依据的最低价格。这是我函数中的代码。php文件:
function advanced_search_query($query) {
if ($query->is_search) {
$query->set(\'post_type\', array( \'properties\' ));
if (isset($_GET[\'propertyfor\'])) {
$query->set(\'taxonomy\', \'propertyfor\');
$query->set(\'terms\', $_GET[\'propertyfor\']);
}
if (isset($_GET[\'propertytype\'])) {
$query->set(\'taxonomy\', \'propertytype\');
$query->set(\'terms\', $_GET[\'propertytype\']);
}
if (isset($_GET[\'minPrice\'])) {
$query->set(\'meta_query\', array(
\'key\' => \'shru_price\',
\'value\' => $_GET[\'minPrice\'],
\'compare\' => \'>=\',
\'type\' => \'NUMERIC\'
));
}
};
return $query;
};
add_filter(\'pre_get_posts\', \'advanced_search_query\', 1000);
如您所见,我试图使用元查询来处理它,但什么都没有发生。显示结果时完全忽略最低价格。
有人知道怎么修理吗?
编辑:仅供参考,数值存储在数据库中,没有任何特殊字符。
更新:它适用于以下情况,其中我设置了最小值和最大值,并在两者之间使用:
if (isset($_GET[\'minPrice\']) && isset($_GET[\'maxPrice\'])) {
$query->set(\'meta_query\', array(
array(
\'key\' => \'shru_price\',
\'value\' => array($_GET[\'minPrice\'], $_GET[\'maxPrice\']),
\'compare\' => \'BETWEEN\',
\'type\' => \'NUMERIC\'
)
));
}
但不是为了我最初发布的内容,那里只设置了一个
>=
或
<=
. 我在两者之间使用了elseif语句,但仍然没有产生任何结果。
最合适的回答,由SO网友:s_ha_dum 整理而成
A meta_query
is an array of arrays. You only have an array.
$query->set(\'meta_query\', array(
\'key\' => \'shru_price\',
\'value\' => $_GET[\'minPrice\'],
\'compare\' => \'>=\',
\'type\' => \'NUMERIC\'
));
它应该是:
$query->set(
\'meta_query\',
array(
array(
\'key\' => \'shru_price\',
\'value\' => $_GET[\'minPrice\'],
\'compare\' => \'>=\',
\'type\' => \'NUMERIC\'
)
)
);
请在使用之前验证/清理用户提供的数据!