【この記事を読むのに必要な時間は約 4 分です】
WordPress の投稿一覧ページ、アーカイブページは記事の「投稿日時」降順でソートし表示されるのがデフォルトになっています。
これは wordpress が「オープンソースのブログソフトウェア」をコンセプトとしているためですが、昨今 wordpress をブログ以外のサイトに用いることは珍しくなく、投稿日時ではない項目を見て並べ替えたいというケースもあります。
今回はアクションフックを用いて表示順序を変えてみましょう。例として、更新日の新しい情報が上位に表示されるようにする方法をご紹介します。
アクションフックを用いて更新日順に記事を表示する
実装は非常に簡単で、function.php の任意の場所に 4 行ほどのコードを記述するだけです。
以下は、 カスタムタクソノミー「review」のアーカイブを更新日順にソートして表示する例です。
/* ------------------------------------------------------- */ /* カスタムタクソノミー「review」のアーカイブを更新日順にソート /* ------------------------------------------------------- */ add_action( 'pre_get_posts', 'foo_modify_query_exclude_archive_review' ); function foo_modify_query_exclude_archive_review( $query ) { if ( ! is_admin() && $query->is_archive() && is_post_type_archive( 'review' ) ) $query->set( 'orderby', 'modified' ); }
add_action によるアクションフックの仕組みについては説明を省略します。ここで注意しておきたいのは if 判定の 3 つの条件です。
1.管理ページを対象から除く
まずひとつめ、! is_admin() により管理ページの一覧は対象から除外しています。もし、管理ページも更新日時順で表示したいのであればこの条件は不要になります。
2.アーカイブページに限定する
is_archive によりソート順変更の影響をアーカイブページのみに限定します。もしTOP ページなどにも記事の一覧を表示しているなら全ページのソート順が変わってしまいます。
なお、TOPページのみとしたいのであれば is_archive の代わりに is_home を条件に指定します。
3.投稿タイプを指定する
ソート順を変更する記事タイプを指定します、例ではカスタムタクソノミー「review」の投稿のみを対象としています。
カテゴリーページとするなら is_category() を、特定のカテゴリーなら is_category(‘カテゴリーID’) を指定すると良いでしょう。
ソート順を変更する
最後に、ソート順を変更するには $query->set の orderby でソートキーを指定してあげます。
$query->set( 'orderby', 'modified' );
デフォルトが DESC (降順)ですので、新しい順なら上記のまま、昇順にしたいのであればさらに以下の 1 行を追加します。
$query->set('order', 'ASC');
いかがでしょうか。ソート順を変更することは非常に簡単だったと思います。
ですが pre_get_posts アクションはすべてのクエリに影響があり、ソートのルールを変えたいところのみに影響を限定するところは少し考慮が必要になるため、判定条件が適切であるか気をつけてください。