WordPressの投稿を並び替える方法

WordPressの投稿を並び替えをする方法ですが、投稿した日付順や、カスタムフィールドの値で並び替える等、様々な条件を指定できます。今回はアクションフックの「pre_get_posts」を使用し、メインクエリの改変を行います。
基本的なソートの方法
functions.phpに追記
function sort_post_asc($query) { /* 管理画面とメインクエリ以外のクエリのときは設定しない */ if( is_admin() || ! $query->is_main_query() ){ return; } if ( $query->is_home() ) { $query->set( 'order', 'ASC' ); return; } } add_action( 'pre_get_posts', 'sort_post_asc' );
上記の記述はメインクエリを改変し、トップページ(is_home)の投稿の並び順を昇順にします。
カスタムフィールドの値でソートする
カスタムフィールドの値を「数字」として扱いソートする
functions.phpに追記
function sort_post_num($query) { /* 管理画面とメインクエリ以外のクエリのときは設定しない */ if( is_admin() || ! $query->is_main_query() ){ return; } if ( $query->is_home() ) { $query->set( 'orderby', 'meta_value_num' ); $query->set( 'meta_key', 'keyname' ); $query->set( 'order', 'DESC' ); return; } } add_action( 'pre_get_posts', 'sort_post_num' );
‘orderby’でどのパラメーターで並び替えるかを指定し、値に’meta_value_num’を代入します。
‘meta_key’のパラメーターには任意のカスタムフィールドのキーを指定してください。
‘order’は’DESC’としてあるので、数字の値が高い順でソートします。
プラグインの「WP-PostViews」を使用し、人気順としてソートする
プラグインの「WP-PostViews」は投稿の回覧数をカスタムフィールドのキー「views」に値(回覧数)を保存してます。この値を使って人気順としてソートすることができます。
functions.phpに追記
function sort_post_views($query) { /* 管理画面とメインクエリ以外のクエリのときは設定しない */ if( is_admin() || ! $query->is_main_query() ){ return; } if ( $query->is_home() ) { $query->set( 'orderby', 'meta_value_num' ); $query->set( 'meta_key', 'views' ); $query->set( 'order', 'DESC' ); return; } } add_action( 'pre_get_posts', 'sort_post_views' );
‘meta_key’に’views’を代入し、’order’を’DESC’にすることで良く見られている投稿順でソートできます。
まとめ
今回はメインクエリを改変しソートをしましたが、サブクエリを作成するときは「get_posts」または「WP_Query」を使用して作成します。サイドバーに最近の投稿や、良く読まれている記事の一覧を作成するときにサブクエリを作成しましょう。