【WordPress】ブログ一覧が表示されないときの対処法。if ( have_posts() ) : while ( have_posts() ) : the_post(); が機能しない!?の解決方法

エラー WordPress
記事内に広告が含まれていることがあります。

WordPressでトップページにブログ一覧を表示するために、phpファイルを編集してコードを正しく設置したのにブラウザに一覧が表示されないときの対処法。

<php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
 処理
<?php endwhile; ?>


発生状況は以下、

・front-page.phpを編集。
・エラーは発生していない。
・投稿は複数作成済み。
・処理が1度の繰り返しで止まってしまう。

原因と対処法

発生原因は「設定」の「表示設定」の「ホームページの表示」で「固定ページ」を指定していたことが原因

これを、「最新の投稿」にチェックをいれれば正しく機能する

以上で完了。

原因をもう少し詳しく

なぜ、「設定」>「表示設定」>「ホームページの表示」の設定で変わるかというと、WPのメインクエリという機能があるため。

WPはページ毎にリクエストがあったときにデフォルトでDBに投げるクエリが決まっている。これをメインクエリという。

トップページの場合は、front-page.php(または、home.php / index.php)がコードとして使われるが、このファイルを開くまえに、DBにクエリを投げる。そのクエリの内容を「表示設定」で制御している。

なので、「最新の投稿」にチェックマークが入っている場合は、DBからブログを一式を取得するクエリを投げる。

一方で「固定ページ」にチェックマークが入っている場合は、DBから指定した固定ページの内容を取得するクエリを投げるので、have_posts()が現在のページの1回分しか存在せず、ループが一度でストップする。

タイトルとURLをコピーしました