我有很多_ai_price_int
元值设置为数字。这是表格的外观:
meta_id, post_id, meta_key, meta_value
1309, 1111, _ai_price_int, 6550
1310, 1115, _ai_price_int, 7100
1311, 1113, _ai_price_int, 7500
1312, 1103, _ai_price_int, 6000
etc.
我用的是
pre_get_posts
筛选以修改特定查询,如下所示:
public function filterQuery($query) {
$query->set(\'post_type\', \'sponsorship\');
$query->set(\'meta_key\', \'_ai_price_int\');
$query->set(\'meta_value\', \'4000\');
$query->set(\'meta_compare\', \'<=\');
$query->set(\'orderby\', \'meta_value_num\');
$query->set(\'order\', \'DESC\');
return $query;
}
add_action(\'pre_get_posts\', Array($this, \'filterQuery\'));
但是玩弄
$query->set(\'meta_value\', \'4000\');
, 结果证明结果是错误的。
使用时2000
, 我收到一篇文章,它的\\u ai\\u price\\u int值为15000
.使用时4000
, 我收到一篇文章,它的\\u ai\\u price\\u int值为35000
.我尝试使用:
$query->set(\'post_type\', \'sponsorship\');
$query->set(\'meta_key\', \'_ai_price_int\');
$query->set(\'orderby\', \'meta_value_num\');
$query->set(\'order\', \'DESC\');
$query->set(\'meta_query\', array(
array(
\'key\' => \'_ai_price_int\',
\'value\' => array(0, 4000),
\'compare\' => \'BETWEEN\'
)
));
相反,结果是一样的。
查看执行的查询,我可以看到它有以下部分:
...AND ((wp_13postmeta.meta_key = \'_ai_price_int\'AND CAST(wp_13postmeta.meta_value AS CHAR) <= \'4000\') )...
Don\'t tell me that WordPress is ordering these values alphabetically?!
我还将此自定义值显式保存为整数:
$price = (int)preg_replace("/([^0-9\\\\.])/i", "", $match[1]);
update_post_meta( $post_id, \'_ai_price_int\', $price );
我做错了什么?
我正在测试WP版本:3.5.2