pre_get_postsのorderbyに複数の条件(カスタムフィールド/投稿日)を指定する方法

pre_get_postsのorderbyに複数の条件(カスタムフィールド/投稿日)を指定する方法

pre_get_postsのorderbyに複数の条件(カスタムフィールド/投稿日)を指定する方法

WordPressで投稿の並び順などを制御する場合、pre_get_postsを使うと便利です。

pre_get_postsで投稿一覧を並べ替える時に、並び順の基準となる値を指定する際はorderbyを使いますが、orderbyで並べ替えの条件を複数指定する方法をご紹介したいと思います。

今回は例として、”カスタムフィールドの値”と”投稿日”を使った場合でご説明します。

pre_get_postsのorderbyに複数の条件を指定する方法

orderbyで複数の条件を指定するには、配列として値を渡してあげます。

カテゴリーアーカイブの並び順を変更する場合、以下のように記述します。


function posts_change_sort_order( $query ) {
  if ( is_admin() || ! $query->is_main_query() ) {
    return;
  }

  if ( $query->is_category() ) {
    $query->set( 'meta_key', 'カスタムフィールド名' );
    $query -> set('orderby', array('meta_value' => 'ASC', 'date' => 'DESC') );
  }
}
add_action( 'pre_get_posts', 'posts_change_sort_order' );

上記の場合、カスタムフィールドの値では昇順(ASC)、投稿日は降順(DESC)で並べ替えられます。

あとがき

カスタムフィールドに設定した日付を基準として投稿一覧を並び替えた時に、カスタムフィールドの日付が同じ場合は投稿日を使って並べ替える、といったように細かく条件を指定することができますね。

覚えておくと便利なので、参考にしていただけると幸いです。

この記事が気に入ったら
いいね!してね♪

Twitter で

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です