我正在尝试使用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的情况下,数字越大则没有问题...
感谢您的帮助。
答案 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 = NUMERIC更改为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');