見出し画像

【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;
    }
}

おおまかに説明すると、

・管理画面、もしくはメインクエリ以外か、を調べる
→trueなら処理を中止
・いまのクエリがトップページか、を調べる
→trueなら処理を実行し、3件だけ投稿を表示する

という処理をしています。

ひとつずつ解説していきます。


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;
    }

is_admin( )
管理画面かどうかを調べます

is_main_query( )
現在のクエリがメインクエリかどうか調べます

今回は、メインクエリ以外かどうかを調べたいので
「! $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件になっていますね。よしよしっと。


よく読まれている記事です


サポート頂いたお金は、商品開発の費用として、ありがたく使わせていただきます。