WordPressの投稿は、投稿日が新しい順に並ぶのが標準です。
しかしそれだと都合が悪い時は、カスタムフィールドに設定した値で投稿を並び替えるのが簡単です。
本記事の内容で実現させること
イベント情報の一覧ページで「イベントの開催日順」に並べ替えて表示させる。など。
ここでは「カスタム投稿タイプ:event」に設定した「カスタムフィールド:date」の値を使って、dateの昇順(値の小さい順)に並べ替えて表示させます。
WP_Queryを使ったサブループ
front-page.phpなどで使います。
$args = array(
'posts_per_page' => 5,
'post_type' => 'event'
'post_status' => 'publish',
'orderby' => 'meta_value', //カスタムフィールドで並べ替える指定
'meta_key' => 'date', //カスタムフィールドのキーを指定
'order' => 'ASC' //昇順で並び替える
);
$the_query = new WP_Query($args);
if( $the_query->have_posts() ) :
while ($the_query->have_posts()) : $the_query->the_post();
// ここでループの処理
endwhile;
endif;
wp_reset_postdata();
メインクエリを書き換える
アクションフック「pre_get_posts()」を使いますので、functions.phpに記述します。
archive-xxx.phpやcategory.phpなどのアーカイブページでメインクエリを書き換える時に使います。
function my_pre_get_posts( $query ) {
if( is_admin() || ! $query->is_main_query() ){
//管理画面、メインループ以外は処理しない
return;
}
if( isset($query->query_vars['post_type']) && $query->query_vars['post_type'] == 'event' ) {
//POST_TYPEがeventの時のみ
$query->set('orderby', 'meta_value'); //カスタムフィールドで並べ替える指定
$query->set('meta_key', 'date'); //カスタムフィールドのキーを指定
$query->set('order', 'ASC'); //昇順で並び替える
}
return $query;
}
add_action('pre_get_posts', 'my_pre_get_posts');