この記事は最後に更新してから1年以上経過しています。

カスタムフィールドで並び替え

説明

WordPressでは複数の投稿記事を取得する際、並び順の指定を省略すると投稿日時の降順になる。並び順は、投稿日時だけでなく、更新日時、投稿名、記事タイトル、コメント数のほか、カスタムフィールドも指定できる。

投稿記事を拡張するカスタムフィールドの値は基本的に文字列になるので、並び順はその文字列の比較となる。まずは文字列として比較して並び替えする方法を確認する。

テストで使用した投稿記事の情報は次の通り。

ID投稿タイトル投稿日時カスタムフィールド
発売日
カスタムフィールド
価格
81商品12012-08-09 14:04:272013-08-0120
83商品22012-08-09 14:46:052013-08-0910000
85商品32012-08-09 14:47:582013-08-03900

query_posts関数やWP_Queryクラスでカスタムフィールドの値を並び順で指定する場合は、クエリパラメータとしてカスタム名を指定する必要がある。例えば、WP_Queryクラスを使って'発売日'というカスタムフィールドで並び替えを行う場合は次のように指定する。

$result = new WP_Query( array( 'meta_key'=>'発売日', 'orderby'=>'meta_value' ) );

検索結果は次の順になる。

ID投稿タイトル投稿日時カスタムフィールド
発売日
カスタムフィールド
価格
83商品22012-08-09 14:46:052013-08-0910000
85商品32012-08-09 14:47:582013-08-0390
81商品12012-08-09 14:04:272013-08-012000

次にカスタムフィールドの'価格'で並び替えてみる。

$result = new WP_Query( array( 'meta_key'=>'価格', 'orderby'=>'meta_value' ) );

この場合の検索結果は次の順になる。

ID投稿タイトル投稿日時カスタムフィールド
発売日
カスタムフィールド
価格
85商品32012-08-09 14:47:582013-08-03900
81商品12012-08-09 14:04:272013-08-0120
83商品22012-08-09 14:46:052013-08-0910000

このような結果になるのは、カスタムフィールドの値を文字として比較するためである。では、数値として並び替えるにはどのようにすればいいかというと、'orderby'パラメータを'meta_value_num'に変更すればいい。

$result = new WP_Query( array( 'meta_key'=>'価格', 'orderby'=>'meta_value_num' ) );

この場合の検索結果は次の順になる。

ID投稿タイトル投稿日時カスタムフィールド
発売日
カスタムフィールド
価格
83商品22012-08-09 14:46:052013-08-0910000
85商品32012-08-09 14:47:582013-08-03900
81商品12012-08-09 14:04:272013-08-0120

このようにイメージ通りの並び順にできた。

目的に応じて'meta_value'と'meta_value_num'をうまく使い分けるのがポイント。まあ、そんなわけで忘れないようにメモっとく。


最終更新 : 2013年08月09日 17:45


お勧め

wp_shortlink_wp_head(2010年6月25日 更新)

void wp_shortlink_wp_head( )
短縮URLを取得し、短縮URLのlinkタグを表示する。

query_posts(2017年7月13日 更新)

array query_posts( mixed $query )
投稿情報を条件を指定して検索し、マッチしたすべてのデータをグローバル変数$postsに、その先頭データを$postにロードする。

get_search_query(2013年1月19日 更新)

string get_search_query( [ bool $escaped = true ] )
ユーザによって検索フォームで入力された検索キーフレーズを取得する。

get_archives_link(2016年5月22日 更新)

string get_archives_link( string $url, string $text [ , string $format = 'html' [ , string $before = '' [ , string $after = '' ] ] ] )
アーカイブページのリンクテキストを取得する。

wp_insert_term(2013年12月25日 更新)

mixed wp_insert_term( string $term, string $taxonomy [ , mixed $args = array() ] )
ターム(カテゴリや投稿タグ)を登録する。