WordPress で投稿一覧をカスタムフィールドの値でソートする方法
最終更新日 - 公開日 2017.04.29
by
WordPress で投稿一覧をカスタムフィールドの値でソートして表示する方法を紹介します。
例えば、投稿をカスタムフィールドの値でソートしたい時に便利な方法です。
投稿一覧をカスタムフィールドの値でソートする
投稿一覧をカスタムフィールドの値でソートする場合は meta_query
を使用します。
例えば、カスタム投稿タイプが products
、カスタムフィールド名が 商品
の場合、フィールド値が ラジオ
の投稿を取得する方法を紹介します。
<?php // 投稿をカスタムフィールドの値でソートする
$custom_field_value = 'ラジオ'; // フィールド値の指定
$args = array(
'post_type' => 'products', // 投稿タイプを指定
'posts_per_page' => -1, // 表示件数を指定
'meta_query' => array( // カスタムフィールドを指定
array(
'key' => '商品', // フィールド名の指定
'value' => $custom_field_value, // 値の指定
'compare' => 'LIKE' // フィールド値の部分一致
)
)
);
$the_query = new WP_Query($args); if($the_query->have_posts()):
?>
<?php while ($the_query->have_posts()): $the_query->the_post(); ?>
<a href="<?php the_permalink(); ?>"><?php echo get_the_title(); ?></a>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php else: ?>
<!-- 投稿が無い場合の処理 -->
<?php endif; ?>
カスタムフィールド名を変更する場合は 'key' => ’商品’,
の 商品
を任意の値に変更。
カスタムフィールド値を変更する場合は $custom_field_value = 'ラジオ’;
の ラジオ
の値を変更してください。
ソートの条件を変更する
ソートの条件を変更する場合は 'compare' => 'LIKE'
の LIKE
を変更します。
変更できる compare
の値は次の通りです。
- =
- 値と一致する
- !=
- 値と一致しない
- >
- 値より大きい
- >=
- 値以上
- <
- 値より小さい
- <=
- 値以下
- LIKE
- 値で指定した文字列に一致する
- NOT LIKE
- 値で指定した文字列に一致しない
- IN
- 値(配列)で指定したいずれかに一致する
- NOT IN
- 値(配列)で指定したいずれにも一致しない
- BETWEEN
- 2つの値で指定した範囲内(境界を含む)
- NOT BETWEEN
- 2つの値で指定した範囲外
カスタムフィールド値が日付の場合に日付でソートする方法
カスタムフィールド値が日付の場合に、その日付の順番でソートする方法を紹介します。
例えば、カスタム投稿タイプが event
、カスタムフィールド名が 開催日
の場合に、各投稿のカスタムフィールド値の日付の順番でソートして表示します。
$args = array( // クエリの作成
'post_type' => 'event', // 投稿タイプの指定
'orderby' => 'meta_value_num', // カスタムフィールド値が数値の場合 meta_value_num を指定
'posts_per_page' => -1, // すべての投稿を表示
'meta_query' => array( // カスタムフィールドの指定
array(
'key' => '開催日', // フィールド名の指定
'type'=>'DATE' // カスタムフィールドの値が日付であることを宣言
)
)
);
数値の桁数が違う場合は意図した順番にならない場合があります。
ソートする値は同じ桁数や書式で用意するようにしてください。
カスタムフィールド値のデータ型を指定する
カスタムフィールドの値は文字列や数値、日付など色々あるので type
にデータの型を指定してあげます。
型の種類は次の通りです。
- ‘CHAR’
- カスタムフィールド値が文字
- ‘NUMERIC’
- カスタムフィールド値が’SIGNED’の別名
- ‘DECIMAL’
- カスタムフィールド値が浮動小数点数
- ‘SIGNED’
- カスタムフィールド値が整数(符号あり)
- ‘UNSIGNED’
- カスタムフィールド値が整数(符号なし)
- ‘DATE’
- カスタムフィールド値が日付
- ‘DATETIME’
- カスタムフィールド値が日時
- ‘TIME’
- カスタムフィールド値が時刻
- ‘BINARY’
- カスタムフィールド値がバイナリー
リピーターフィールド値でソートする方法
ACFのリピーターフィールド値でソートする場合は、$key の値に「フィールド名(リピーターフィールド)」と「サブフィールド名」を記載します。その際、フィールド名の区切りに対象の配列「_0_」を指定します。
$args = array( // クエリの作成
'post_type' => 'event', // 投稿タイプの指定
'posts_per_page' => -1, // すべての投稿を表示
'meta_query' => array( // カスタムフィールドの指定
array(
'key' => 'フィールド名_0_サブフィールド名', // フィールド名の指定
'value' => $value, // 値の指定
)
)
);
紹介したコードでは「フィールド名_0_サブフィールド名」とすることで、リピーターフィールドの最初(一番目)の配列にあるサブフィールド名を対象にします。二番目、三番目の値を参照するには次のように記載します。
$args = array( // クエリの作成
'post_type' => 'event', // 投稿タイプの指定
'posts_per_page' => -1, // すべての投稿を表示
'meta_query' => array( // カスタムフィールドの指定
'relation' => 'OR', // OR検索(デフォルトはAND)
array(
'key' => 'イベントセット_0_イベント', // 一番目の配列
'value' => $value // 値の指定
),
array(
'key' => 'イベントセット_1_イベント', // 二番目の配列
'value' => $value // 値の指定
),
array(
'key' => 'イベントセット_2_イベント', // 三番目の配列
'value' => $value // 値の指定
)
)
);
relation の指定は表示内容に合わせて変更してください。
参照する値が日付の場合は、前項の「カスタムフィールド値が日付の場合に日付でソートする方法」を参考に type
を指定してください。
まとめ
WordPress で投稿一覧をカスタムフィールドの値でソートして表示する方法を紹介した。
その他、投稿の詳しい取得方法はWordPress 基本的なループの表示方法を紹介をご覧ください。