按数字自定义字段对WordPress帖子进行排序


Sort WordPress posts by numerical custom fields

我添加了一个代码,允许我按自定义字段对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');

我想知道这能帮到你;)