質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

Q&A

解決済

1回答

677閲覧

posts_per_pageで指定した記事数を下回る表示数の場合、空のループが出現してしまう。

mtzk775

総合スコア10

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

0グッド

0クリップ

投稿2022/04/25 09:13

PHP初心者です。
Wordpressでブログページを作成中なのですが、どうしても分からないことがあってお伺いしたいです。
ページネーションの実装にあたって、表示する記事に空のループが出現してしまうので、その空のループを表示しないようにしたいです。

プラグインのPageNaviを使用しページネーションを表示させようとしたところ、

1)2ページ目が404になってしまう
2)コードを修正し、404は回避したものの2ページ目と1ページ目が同じになる
現在)さらに修正し、以下のコードになりページネーションは機能したが空のループが出現してしまう

という順に問題が発生しました。
管理画面およびposts_per_pageで、1ページに表示する件数を3件にしているのですが、
一覧に表示される件数が3件を下回った場合、記事を表示する予定である部分が空のループで表示されてしまいます。
例えば、1件しか表示する記事が無かった場合、余った2件が中身が無いのに記事として表示されてしまいます。

イメージ説明
↑汚い画像で申し訳ないです。
実際にカテゴリページで表示した場合、表示するものが2件しかないと、破線赤丸で示したように、最後の1つ分がテキストの入っていない空のループで出てきてしまいます。
この部分を非表示にしたいです。

search.phpとindex.php(トップページはfront-page.phpを使用)に記述したコードは以下の通りです。
検索して見様見真似で記述したのですが…。

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $posts_per_page = 3; //1ページの中に出力する記事数を定義 query_posts($query_string . '&posts_per_page='.$posts_per_page.'&paged=' . $paged); $args = array( 'posts_per_page' => $posts_per_page, //1ページの中に出力する記事数(上の変数で定義する) 'paged' => $paged, 'order' => 'DESC', ); ?> <?php $my_query_sample = new WP_Query( $args ); ?> <?php if ($my_query_sample->have_posts()): ?> <?php while ( $my_query_sample->have_posts() ) : $my_query_sample->the_post(); ?> <?php the_post(); //データ1件分を取り出す ?> <!--////////// Blog //////////--> ここはブログのループ <!--////////// END Blog //////////--> <?php endwhile; //ループ終了 ?> <?php else: //当てはまる記事が無い場合 ?> <div class="order_blog notopic_text"> <div class="text"> <h3 class="color_h3">No article</h3> <p>お探しの検索結果は見つかりませんでした</p> </div> </div> <?php endif; //条件分岐終了 ?> <!--////////// 中略 //////////--> <hr> <!--/// ページ送り ///--> <?php if(function_exists('wp_pagenavi')) {wp_pagenavi();} ?>

posts_per_pageがダメなのか?と思い、

$posts_per_page = 3; //1ページの中に出力する記事数を定義

'posts_per_page' => $posts_per_page, //1ページの中に出力する記事数(上の変数で定義する)

の部分を消してみたところ、1回は何故か空ループが消え上手く表示されたのですが、少し時間が経って確認したところ、
また空のループが表示される状態に戻りました。
その後何度上書きしキャッシュを削除して確認しても、空のループは表示したままです。

いろいろ調べてみたのですが、当方PHPのコーディングは初めてで、どうしても解決方法を見つけることが出来なかったため、ご指導いただけますと幸いです。
お見苦しい質問内容で申し訳ありませんが、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2022/04/25 14:02

query_posts と WP_Query の両方で検索しているのは なにか理由があるのでしょうか。
mtzk775

2022/04/25 14:51

ご指摘ありがとうございます。 http://techstock-online.com/wp-pagination/ 当方PHP初挑戦なので、こちらのページに行き着き、一旦書いてある通りにしてみようということで、このような記述となりました。 理解が浅く申し訳ないのですが、上記のページにあるような、「ページごとに表示件数を変更したい」という意図はありませんので、query_postsは不要でしょうか。
guest

回答1

0

自己解決

大変申し訳ございません。
ご指摘を受けて何度か修正を試みたところ、一番最初のスタンダードなループで正常に機能しました。
1番最初に同じコードでページネーションの2ページ目が404になっていたのですが、
何故か本日その状態に戻したところ、ページネーションの404も無く、空ループも出ず、思い通りの実装となりました。

コードは以下の通りです。

PHP

1 <?php if ( have_posts() ) : ?> 2 <?php while ( have_posts() ) : ?> 3 <?php the_post(); ?> 4 5 6 <!--////////// 記事 //////////--> 7 <?php get_template_part('template_parts/hoge_inc'); ?> 8 <!--////////// END 記事 //////////--> 9 10 <?php endwhile; ?> 11 12 <?php else: ?> 13 14 <div class="order_blog notopic_text"> 15 <div class="text"> 16 <h3 class="color_h3">No article</h3> 17 <p>表示できる情報がまだありません</p> 18 </div> 19 </div> 20 21 <?php endif; ?> 22 23 24 <!--////////// 中略 //////////--> 25 26 27<hr> 28<!--/// ページ送り ///--> 29<?php if(function_exists('wp_pagenavi')) {wp_pagenavi();} ?>

お騒がせして申し訳ありませんでした。
管理画面での表示件数設定が良くなかったのかもしれません。

ありがとうございました。

投稿2022/04/26 09:52

mtzk775

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問