Wordpress - 在两个小数字之间使用meta_query

时间:2013-01-25 13:07:51

标签: wordpress metadata

我正在尝试使用meta_query parmater来获取两个值之间的值的帖子,问题是它不适用于所有数字。

这是工作:

$array[] = array(
    'key' => 'd_weight',
    'value' => array(0,0.5),
    'compare' => 'BETWEEN',
    'type' => 'NUMERIC'
);

但由于某些原因,这不起作用:

$array[] = array(
    'key' => 'd_weight',
    'value' => array(0.1,0.5),
    'compare' => 'BETWEEN',
    'type' => 'NUMERIC'
);

问题只发生在数字小于1的情况下,数字越大则没有问题...

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

对于十进制数字,您应使用'DECIMAL'代替'NUMERIC'

$array[] = array(
    'key' => 'd_weight',
    'value' => array(0.1,0.5),
    'compare' => 'BETWEEN',
    'type' => 'DECIMAL'
);

答案 1 :(得分:1)

Mridul的回答是部分正确的,但OP的情况还有更多,特别是在处理BETWEEN比较时。在从type = NUM​​ERIC更改为type = DECIMAL之后,还需要特殊处理来过滤WP类型转换为DECIMAL数据类型的方式(否则它将使用默认精度。)下面非常粗略的示例:

function wp_get_meta_sql_cast_decimal_precision($meta_query) {
    $meta_query['where'] = str_replace('DECIMAL', 'DECIMAL(10,3)', $meta_query['where']);
    return $meta_query;
}
add_filter('get_meta_sql', 'wp_get_meta_sql_cast_decimal_precision');