我添加了一个代码,允许我按自定义字段对WordPress帖子进行排序。我试图按价格对帖子进行排序,但它是按第一个数字排序,而不是按价值排序:
$116.99
$12.95
$149.00
$15.99
代替:
$12.95
$15.99
$116.99
$149.00
我怎样才能把它正确分类?
这是代码:http://pastebin.com/Pe5yfvrE
我从这次讨论中得到了它,但它在那里没有得到解决。。
http://wordpress.org/support/topic/sort-posts-by-custom-field-in-backend
如果您想手动操作(尽管引用WP_Query
的答案是更好的选择),一个相当好的处理方法可能会使用array_multisort
:
$arr = array(
'$116.99',
'$12.95',
'$149.00',
'$15.99'
);
$keys = array();
foreach ($arr as $value) {
$keys[] = floatval(substr($value, 1));
}
array_multisort($keys, SORT_ASC, $arr);
使用WP_Query类和orderby=meta_value_num参数进行数字排序。此外,请确保将价格存储在自定义字段中,作为一个没有"$"前缀的数字。
$query = new WP_Query( array ( 'orderby' => 'meta_value_num', 'meta_key' => 'price' ) );
$query
然后包含按价格数字排序的帖子行。
我还没有看过你的代码,但这与你的情况下数字是字符串有关。如果你对一个字符串进行排序,它会像你描述的那样进行排序。为了按其值进行排序,您需要删除$
符号并将其强制转换为数字。
你看到这种技术了吗?-将0添加到的元值,以强制将其视为整数。这些年来,这篇帖子也更新了很多次,所以它可能会对你有所帮助;
http://wordpress.org/support/topic/order-by-meta_key-where-meta_value-is-number?replies=11
function order($a, $b) {return intval($b) - intval($a);}
uasort($array, 'order');
我想知道这能帮到你;)