サポート » 使い方全般 » meta_key(meta_value)の値を数値としてソートしたい

  • 解決済 LVP8

    (@lvp8)


    色々検索してみましたが、解決策が得られなかったので質問させてください。

    カスタムフィールドに数値を入力しています。この数値を使って数字の大きい順に記事の並べ替えをしたいのですが、文字列として?扱われているのかうまくいきません。

    カスタムフィードの値が、「11、2、1、9、114」という時、9→2→14→114→1 という順番に並んでしまいます。これを、114→14→9→2→1 にするにはどうすれば良いでしょうか。

    現在のコードです。

    <?php
    query_posts(array(
    'cat' => 3,
    'meta_key' => suuji,
    'orderby' => meta_value,
    'posts_per_page' => 10,
    'paged' => $paged
    ));
    while (have_posts()):
    the_post();
    ?>

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック投稿者 LVP8

    (@lvp8)

    下記トピックを参考に自己解決しました。
    http://wordpress.org/support/topic/277454?replies=15

    コア(wp-includes/query.php )の2005行目に
    $allowed_keys[] = 'meta_value_num';

    2032行目に

    case 'meta_value_num':
    $orderby = "$wpdb->postmeta.meta_value+0";
    break;

    を追加し、

    query_posts(array(
    ‘cat’ => 3,
    ‘meta_key’ => suuji,
    ‘orderby’ => meta_value_num,
    ‘posts_per_page’ => 10,
    ‘paged’ => $paged
    ));
    while (have_posts()):
    the_post();

    とすれば思い通りになりました。

    コアをいじるので躊躇しましたが、3.0では実装されるようで(http://core.trac.wordpress.org/ticket/10649)、開発版でも既に「meta_value_num」が追加されていました。アップデートしてもこのままいけそうです。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「meta_key(meta_value)の値を数値としてソートしたい」には新たに返信することはできません。