【问题标题】:Wordpress filter products by price using numeric comparisonWordpress 使用数字比较按价格过滤产品
【发布时间】:2015-08-16 09:16:30
【问题描述】:

通过 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-&gt;set( 'meta_type', 'decimal' );

但是当我填写 10 作为 minprice 和 20 作为 maxprice 时,我也会得到类似 9,86 和 20,30 的结果。

当我将 10.50 作为 minprice 并将 20 作为 maxprice 时,10,50 之前的所有内容都会在拍摄时消失,但 20,30 仍然存在。

【问题讨论】:

    标签: php wordpress filter filtering


    【解决方案1】:

    我已经找到了解决方案。

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

    我已经改成:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 2021-01-10
      • 2014-05-13
      • 2020-08-17
      • 2023-02-04
      • 2016-05-31
      相关资源
      最近更新 更多