使用pre_get_posts,我使用过滤器扩展查询。我现在试着做一个自定义价格过滤器,因为我不能使用原来的过滤器
我使用的代码:
$minprice = 0;
$maxprice = 0;
if ( isset( $_GET['min_price'] ) && $_GET['min_price'] > 0 ) $minprice = $_GET['min_price'];
if ( isset( $_GET['max_price'] ) && $_GET['max_price'] > 0 ) $maxprice = $_GET['max_price'];
if ( $minprice > 0 || $maxprice > 0 ) {
$compare = '=';
$metavalue = '';
if ( $minprice > 0 && $maxprice > 0 ) { $compare = 'between'; $metavalue = array( $minprice, $maxprice ); }
if ( $minprice > 0 && $maxprice <= 0 ) { $compare = '>='; $metavalue = $minprice; }
if ( $maxprice > 0 && $minprice <= 0 ) { $compare = '<='; $metavalue = $maxprice; }
$query->set( 'meta_key', 'price' );
$query->set( 'meta_value', $metavalue );
$query->set( 'meta_compare', $compare );
}
问题是,如果我为min_price填写10,我也会得到2欧元的产品。我知道WP是比较值作为字符串。我怎么把它变成数字呢?
编辑:我做了一些进展,添加:$query->set( 'meta_type', 'decimal' );
但是当我把10填为minprice,把20填为maxprice时,我也会得到像9,86和20,30这样的结果。
当我把10.50填为minprice,把20填为maxprice时,在10,50之前的内容都消失了,但是20,30还在。
我找到解决办法了。
这是一个(旧的)mysql错误:https://bugs.mysql.com/bug.php?id=61691
我把它改成:
$query->set( 'meta_type', 'DECIMAL(20,2)' );