我添加了一个代码,允许我按自定义字段对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
答案 0 :(得分:3)
如果你想手动完成(虽然引用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);
答案 1 :(得分:1)
使用WP_Query class and the orderby=meta_value_num parameter进行数字排序。另外,请确保将自定义字段中的价格存储为不带“$”前缀的数字。
$query = new WP_Query( array ( 'orderby' => 'meta_value_num', 'meta_key' => 'price' ) );
$query
然后包含按价格按数字排序的帖子行。
答案 2 :(得分:0)
我还没看过你的代码,但是这与你的情况下的字符串数字有关。如果对字符串进行排序,则会按照您的描述进行排序。为了按它的值进行排序,您需要删除$
符号并将其转换为数字。
答案 3 :(得分:0)
你看到这种技术了吗? - 将0添加到元的值以强制将其视为整数。多年来,该帖子已经多次更新,因此它可能对您有所帮助;
http://wordpress.org/support/topic/order-by-meta_key-where-meta_value-is-number?replies=11
答案 4 :(得分:0)
function order($a, $b) {return intval($b) - intval($a);}
uasort($array, 'order');
我想知道可以帮助你;)