pre_get_postsを使うとテンプレートを編集せずに記事の表示設定ができる

Codexのquery_postsページにあるpre_get_postsを使いis_main_query()を推奨するという記述があるのでpre_get_postsを試してみました。

結論から言うと、functions.phpファイルで表示内容を変更するコードを書くので、他のテンプレートファイル(index.phpやcontent.phpなど)を編集することなく表示する記事数など変えれることができるので、テンプレートファイルを編集して表示を設定するよりもファイルのコードが増えないので見やすく読みやすいです。

因みにpre_get_postsで設定した表示数は、一時的なもので管理画面の設定にある「表示設定」の「1ページに表示する最大投稿数」に設定した件数とは違う表示件数を実現できるということで、テーマファイルを変えると表示件数がもとに戻ります。

使い方

functions.phpファイルに表示件数を設定するため、add_action(‘pre_get_posts’, ‘関数名’)でpre_get_postsに関数をフックします。

add_action('pre_get_posts', 'test');

色々設定できるようですが、関数(text)で下のコードのように$query->set()で表示件数や表示カテゴリーを設定します。下の例ですと、カテゴリーIDが5で、表示件数は7件の設定が出来ます。

function test( $query ) {
  if ( $query->is_home() && $query->is_main_query() ) {
    $query->set('posts_per_page', '7'); //表示件数を設定
    $query->set( 'cat', '5' ); //表示カテゴリー設定
  }
}

あるカテゴリーを除外するときは、マイナス(-)をIDに付加することで出来ます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です