1

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

4

5 に答える 5

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);
于 2012-07-09T21:28:17.727 に答える
1

数値順に並べ替えるには、WP_Query クラスと orderby=meta_value_num パラメータを使用します。また、「$」を前に付けずに数値としてカスタム フィールドに価格を保存してください。

$query = new WP_Query( array ( 'orderby' => 'meta_value_num', 'meta_key' => 'price' ) );

$query次に、価格で数値順にソートされた投稿の行が含まれます。

于 2012-07-09T21:24:03.910 に答える
0

私はあなたのコードを見ていませんが、これはあなたの場合、数字が文字列であることに関係しています。文字列を並べ替えると、説明したように並べ替えられます。値で並べ替えるには、$符号を削除して数値にキャストする必要があります。

于 2012-07-09T21:22:27.477 に答える
0

このテクニックを見たことがありますか?- のメタ値にゼロを追加して、強制的に整数として扱われるようにします。投稿は何年にもわたって何度も更新されているため、役立つかもしれません。

http://wordpress.org/support/topic/order-by-meta_key-where-meta_value-is-number?replies=11

于 2012-07-09T21:24:28.943 に答える
0
function order($a, $b) {return intval($b) - intval($a);}
uasort($array, 'order');

それがあなたを助けることができるのだろうか;)

于 2012-07-09T21:33:07.447 に答える