カスタムフィールドに設定した項目で投稿を並び替える方法

公開日:2021/1/12

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');

参考情報

この記事を書いた人

井上 憲作

1975年生まれ。PCパーツの通販サイト管理者から、大手インターネット広告代理店にて、100社以上のコンサルティングやSEO施策に従事したのち、2018年に独立。趣味はスキューバダイビング。

カテゴリー

人気の記事

  1. 株式会社Revery
  2. ブログ
  3. WordPressカスタマイズ
  4. カスタムフィールドに設定した項目で投稿を並び替える方法