【0から学ぶWordPress】トップページに投稿記事の表示数を指定して表示

まいど!ドスブイサポートの高橋しゃちょーです。

今日は、簡単な内容ではありますがとてもよくある案件です。

必要な指定した固定ページに決められた投稿タイプの記事を4件とか3件だけ表示したいってリクエストがあると思いますので、そちらを解説したいと思います。

メインクエリについて

今回はトップページをテーマに説明して参ります

まずそもそも、Wordpressの仕組みはどうなっているかといいますと
指定されたURLでDBに命令を送って
それを元にDBから抽出された内容をWEBサーバーに表示させます。

このデータベースに検索をかける作業のことを
「メインクエリ」といいます。

メインクエリでDB(データベース)に命令を送って
それをデータベースから抽出してWordpressに表示しているイメージです。

固定ページに投稿数を指定して表示する

メインクエリで記事数の制限をしないと、トップページでもどのページでも
WordPressの設定で決めた表示件数になってしまいますね
デフォルトだと10件表示とかですね。

記事一覧はそのままでいいけどトップページには、よくある
floatで4件表示みたいな横並びみたいに4件にしたいとき

様々な方法がありますが、私はfunctions.phpに記載してあげます。

この条件を指定してあげることをメインクエリに「フック」をかけるなど聞いたことあるかもしれませんが、この検索前の条件追記がフックなのです

ではフックの掛け方をみてみましょう

メインクエリにフックをかける

それではさっそくトップページに限ったメインクエリでのアクションフックになります。

function news_post_per_page($query){
    if(is_admin()||!$query->is_main_query())
    return;
    if($query->is_front_page()){
        $query->set('posts_per_page','4');
    }
}
add_action('pre_get_posts','news_post_per_page');

この is_main_query() 関数は条件分岐関数で、現在のクエリー(ループ内など)が「メイン」クエリーかどうかを判断するのに使えます。

is_front_page()この条件分岐タグはサイトのフロントページが表示中かどうかを判定します。これは TRUE または FALSE を返す真偽値型の関数です。T

これによって、「メインクエリ」で「トップページ(front_page」でposts_perpageを4にしているので
投稿記事を4件取得してください

といったアクションフックがかかってきますので

トップページで

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
記事の内容
<?php endwhile; endif; ?>

恒例のこの構文でHTMLを記載すれば、トップページは4件表示となってます!
しかし、他のページでは10件表示のままになってます。

こういった使い方で表示件数を指定してあげれます

まとめ

いかがでしたでしょうか!
今回はワードプレスの仕組みから
メインクエリと条件分岐のフックの使い方を説明させて頂きました

これで指定したページには投稿を何件表示させるか個別に指定してあげることができるようになりました

以上