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)で並べ替えられます。
あとがき
カスタムフィールドに設定した日付を基準として投稿一覧を並び替えた時に、カスタムフィールドの日付が同じ場合は投稿日を使って並べ替える、といったように細かく条件を指定することができますね。
覚えておくと便利なので、参考にしていただけると幸いです。