WordPressの投稿一覧は投稿日時順で表示されるが、更新日時順で表示したい場合のカスタマイズ方法。
ソースコード
ブログ一覧やアーカイブやカテゴリーの並び順を、更新日時順にする場合。
function my_orderby_modified($query) {
if (is_admin() || !$query->is_main_query()) {
return;
}
if ($query->is_main_query()) {
if ($query->is_home() || $query->is_category() || $query->is_archive()) {
$query->set('orderby', 'modified');
}
}
}
add_action('pre_get_posts', 'my_orderby_modified');
コードの解説
is_main_query()
:条件分岐関数で、現在のクエリー(ループ内など)が「メイン」クエリーかどうかを判断するのに使えます。
pre_get_posts
:Wordpressがクエリを実行する前に呼び出されているフック。それぞれのページに合ったクエリの問い合わせ結果をメインクエリとして扱うことができる。
注意
if ( is_admin() || ! $query->is_main_query() ){
return;
}
pre_get_posts
は、メインクエリが実行される前のクエリを書き換えてしまうため、管理画面やプレビュー時に表示がされなくなる場合があります。それを回避するために上記の分岐を一番最初に書きます。