pre_get_postsに関するメモ
- Category: WordPress関係
メインクエリ(そのページに本来表示する内容)を変更する場合はquery_postsじゃなくてpre_get_postsフィルター使おうね、的なのを今更知ったのでメモっておく。
ちなみにサブクエリ(ブログのサイドバーに表示する「関連記事」みたいなのとか)の場合はget_posts使った方がいいらしい。
使い方
function my_posts_new($query){
//管理画面またはメインクエリじゃない場合は何もしない
if(is_admin() || ! $query->is_main_query() ) {
return;
}
//以下変更内容を記述
}
//最後にadd_action
add_action('pre_get_posts','my_posts_new');
変更内容の記述について
if ( $query-> [条件指定] ) {
$query->[詳細な変更内容];
}
みたいに書く。以下記述例。基本的にget_postsで指定できる内容が指定できるみたい。if文の条件指定部分は動作しないものがあるみたい。
カテゴリページのみ1ページ毎の表示件数を15件にしたい
if ( $query->is_category() ) {
$query->set('posts_per_page', '15');
}
トップページに投稿だけじゃなくカスタム投稿も含めた新着5件を表示したい
if ( $query->is_home() ) {
$query->set('post_type', array('post', 'カスタム投稿名') );
$query->set('posts_per_page', '5');
}