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

时间:2012-07-09 21:18:17

标签: php wordpress

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

5 个答案:

答案 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');

我想知道可以帮助你;)