この記事は最後に更新してから1年以上経過しています。
説明
WordPressでは複数の投稿記事を取得する際、並び順の指定を省略すると投稿日時の降順になる。並び順は、投稿日時だけでなく、更新日時、投稿名、記事タイトル、コメント数のほか、カスタムフィールドも指定できる。
投稿記事を拡張するカスタムフィールドの値は基本的に文字列になるので、並び順はその文字列の比較となる。まずは文字列として比較して並び替えする方法を確認する。
テストで使用した投稿記事の情報は次の通り。
ID | 投稿タイトル | 投稿日時 | カスタムフィールド 発売日 | カスタムフィールド 価格 |
---|---|---|---|---|
81 | 商品1 | 2012-08-09 14:04:27 | 2013-08-01 | 20 |
83 | 商品2 | 2012-08-09 14:46:05 | 2013-08-09 | 10000 |
85 | 商品3 | 2012-08-09 14:47:58 | 2013-08-03 | 900 |
query_posts関数やWP_Queryクラスでカスタムフィールドの値を並び順で指定する場合は、クエリパラメータとしてカスタム名を指定する必要がある。例えば、WP_Queryクラスを使って'発売日'というカスタムフィールドで並び替えを行う場合は次のように指定する。
$result = new WP_Query( array( 'meta_key'=>'発売日', 'orderby'=>'meta_value' ) );
検索結果は次の順になる。
ID | 投稿タイトル | 投稿日時 | カスタムフィールド 発売日 | カスタムフィールド 価格 |
---|---|---|---|---|
83 | 商品2 | 2012-08-09 14:46:05 | 2013-08-09 | 10000 |
85 | 商品3 | 2012-08-09 14:47:58 | 2013-08-03 | 90 |
81 | 商品1 | 2012-08-09 14:04:27 | 2013-08-01 | 2000 |
次にカスタムフィールドの'価格'で並び替えてみる。
$result = new WP_Query( array( 'meta_key'=>'価格', 'orderby'=>'meta_value' ) );
この場合の検索結果は次の順になる。
ID | 投稿タイトル | 投稿日時 | カスタムフィールド 発売日 | カスタムフィールド 価格 |
---|---|---|---|---|
85 | 商品3 | 2012-08-09 14:47:58 | 2013-08-03 | 900 |
81 | 商品1 | 2012-08-09 14:04:27 | 2013-08-01 | 20 |
83 | 商品2 | 2012-08-09 14:46:05 | 2013-08-09 | 10000 |
このような結果になるのは、カスタムフィールドの値を文字として比較するためである。では、数値として並び替えるにはどのようにすればいいかというと、'orderby'パラメータを'meta_value_num'に変更すればいい。
$result = new WP_Query( array( 'meta_key'=>'価格', 'orderby'=>'meta_value_num' ) );
この場合の検索結果は次の順になる。
ID | 投稿タイトル | 投稿日時 | カスタムフィールド 発売日 | カスタムフィールド 価格 |
---|---|---|---|---|
83 | 商品2 | 2012-08-09 14:46:05 | 2013-08-09 | 10000 |
85 | 商品3 | 2012-08-09 14:47:58 | 2013-08-03 | 900 |
81 | 商品1 | 2012-08-09 14:04:27 | 2013-08-01 | 20 |
このようにイメージ通りの並び順にできた。
目的に応じて'meta_value'と'meta_value_num'をうまく使い分けるのがポイント。まあ、そんなわけで忘れないようにメモっとく。
最終更新 : 2013年08月09日 17:45
関連
お勧め
get_next_image_link(2021年7月25日 更新)
wp_after_insert_post(2020年12月11日 更新)
wp_save_post_revision(2024年1月10日 更新)
wp_debug_backtrace_summary(2012年6月15日 更新)
nocache_headers(2018年5月27日 更新)