WordPress

query_postsを使用したページネーションで2ページ目以降が404 Not Foundになる問題

記事内に商品プロモーションを含む場合があります

先週からWordPressを使用した若干込み入ったサイトの構築をしているのですが、久しぶりにはまりました。

固定ページでもアーカイブページでもなんでもいいのですが、テンプレート内にquery_posts関数を使ってページネーションをしようと思い、以下のように関数を記述し、「WP-PageNavi」プラグインを使ってページネーションを表示させたところ、2ページ目へ移動するリンクをクリックしても、リンク先が404 Not Foundになってしまいました。

<?php query_posts('&amp;posts_per_page=5'); ?>

↑こんな感じです。1ページにつき5件の記事を表示させたいわけです。
2ページ目には6件目の記事から表示、3ページ目は11件目の記事から表示・・・としていきたいのですが、どうしてもそうならない!

いろいろ調査した結果、WordPressでの管理画面の設定と、テンプレートで記述したquery_postsの引数の設定が競合することで発生する問題のようです。

どういうことか? 簡単に説明します。
例えば、あるカテゴリーの全記事数が10件だったとします。
そんで、query_postsに渡す引数を「’&posts_per_page=5’」のようにして1ページあたり5個の記事を表示させたいとします。

ところが、WordPressの管理画面の「表示設定」で5件より大きい数字、例えば1ページに表示する投稿数が20件と設定されていると。

query_posts関数で与えた「1ページ当たり5個」という記事数の設定が無視されてしまうのです。
正確に言うと、WordPressの設定では1ページ当たり20個の記事を表示するようになっていて、今回の例で取り上げたカテゴリーの全投稿数は10件です。WordPress的には「1ページ当たり20件表示する設定なんだから、全記事数が10件のカテゴリーは1ページだけで表示できちゃうでしょ」

となってしまうみたいなんです。
それで2ページ目のリンクをクリックしても、404 Not Found となってしまうのです。

対策としては、WordPressの管理画面の設定で「1ページに表示する最大投稿数」を「1」にすることで回避できます。

これで常にquery_postsで設定した1ページ当たりの記事数が反映されるようになります。
ただこれだと、すべてのテンプレートに記述されているquery_posts関数に「’&posts_per_page=XX’」みたいに引数を渡さないといけないですね・・・ もっといい方法があったら教えてください。



ご覧いただきありがとうございました!

各種SNS等で活動を行っております。よろしければ併せてフォローしていただけるとうれしいです!
X(旧Twitter)
Instagram
note
SNSではブログでは書けない内容や、管理人のプライベートな情報の発信を行っています。DM等でのご相談も随時承っておりますので、どうぞよろしくお願いいたしますm(__)m

「いいね!」と思ったら、クリックお願いいたします<m(__)m>
にほんブログ村 メンタルヘルスブログ 統合失調症へ 統合失調症ランキング
にほんブログ村 介護ブログ 障がい者福祉・介護へ 障がい者ランキング
にほんブログ村 企業ブログ IT・情報通信業へ IT・通信業ランキング
ABOUT ME
立花浩紀
Web制作を専門とするフリーランスです。就労継続支援B型の職業指導員をしていました。統合失調症の当事者でもあります。福祉ITラボではITと障害福祉を掛け合わせた情報を発信しています。放送大学 心理と教育コース 所属。社会福祉士養成課程。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA