【WordPress】トップページだけ表示する投稿数を変える
やりたいこと
トップページの投稿表示数を3件に減らしたいと思います。
全ページ共通で投稿数を設定する方法
管理画面「設定」→「表示設定」で「1ページに表示する最大投稿数」が設定できます。
しかし、この設定は、テーマ全体に影響してしまいますので、全ページがこの設定に従ってしまいます。
トップページだけ表示する投稿数を変えるにはどうしたらよいでしょうか。
トップページのみ投稿数を変更する方法
「pre_get_posts」アクションフックを使う
pre_get_postsとは、WPがクエリを取得する前に実行されるアクションフックです。
今回は、関数my_pre_get_posts(任意の名前でOK)を作成し、実行することにします。
記述例
<?php
add_action( 'pre_get_posts', 'my_pre_get_posts' );
function my_pre_get_posts($query) {
// 管理画面、メインクエリー以外には設定しない
if ( is_admin() || ! $query->is_main_query() ){
return;
}
//トップページの場合
if ( $query->is_home() ) {
$query->set( 'posts_per_page', 3 );
return;
}
}
おおまかに説明すると、
という処理をしています。
ひとつずつ解説していきます。
pre_gets_postsアクションフックを作成
add_action( 'pre_get_posts', 'my_pre_get_posts' );
function my_pre_get_posts($query) {
}
関数 my_pre_get_posts(任意の名前でOK)の引数には$queryをもたせます。
実行する関数を定義
// 管理画面、メインクエリー以外には設定しない
if ( is_admin() || ! $query->is_main_query() ){
return;
}
今回は、メインクエリ以外かどうかを調べたいので
「! $query->is_main_query()」となります。
//トップページの場合
if ( $query->is_home() ) {
$query->set( 'posts_per_page', 3 );
return;
}
'posts_per_page', 3と記述すれば、3件の投稿を表示することになります。
全体の記述
<?php
add_action( 'pre_get_posts', 'my_pre_get_posts' );
function my_pre_get_posts($query) {
// 管理画面、メインクエリー以外には設定しない
if ( is_admin() || ! $query->is_main_query() ){
return;
}
//トップページの場合
if ( $query->is_home() ) {
$query->set( 'posts_per_page', 3 );
return;
}
}
実際の表示
きちんと3件に減りました。
最新の3件になっていますね。よしよしっと。
よく読まれている記事です
サポート頂いたお金は、商品開発の費用として、ありがたく使わせていただきます。