Wordpress按价格使用数字比较筛选产品

时间:2015-06-02 14:08:50

标签: php wordpress filter filtering

使用pre_get_posts,我使用过滤器扩展查询。 我现在正在尝试制作自定义价格过滤器,因为我无法使用原始过滤器

De code i使用:

$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作为最低价格和20作为最大价格时,我也得到9,86和20,30的结果。

当我以10.50作为最低价格和20作为最大价格时,10,50之前的所有内容在拍摄时都消失了,但仍然有20,30。

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。

这是一个(旧的)mysql错误: https://bugs.mysql.com/bug.php?id=61691

我已将其更改为:

$query->set( 'meta_type', 'DECIMAL(20,2)' );