WordPressのページネーションをプラグインなしで作って苦戦した話

WordPressのページネーションをプラグインなしで作って苦戦した話雑記

WordPressのページネーションをプラグインなしで作って苦戦した話

今回の内容、言われてみればとても簡単なことです。
しかし、なかなか気づくことができず苦戦しました。

ということで、同じミスにハマってしまった人のヒントになればと思い、
「WordPressのページネーションをプラグインなしで作って苦戦した話」という投稿を書いてみたいと思います。

 

スポンサーリンク

WordPressのページネーションを プラグインなしで作る

やりたかったのは、
「WordPressのページネーションをプラグインなしで作る」
です。

知識や技術がある人にとっては簡単な話だと思うのですが、私は大変苦戦しました。

 

[最終結論]$wp_queryと$the_queryに変更

最終的な結論は、
$wp_query を $the_queryに変更しなければいけなかった、
ということでした。

 

この結論だけで分かる人には分かっていただけたと思います。

苦戦した内容

このようなところを苦戦しました。

次のページが表示されない

まずは1つ目、「次のページが表示されない」です。
例えば1,2,3とページネーションが表示されていたとします。

現在は1ページ目にいるとして、次ページである’2’のリンクをクリックすると、404エラーが発生してしまいました。

 

ありがちなのが下記ページのようなことだと思います。

カスタム投稿アーカイブで2ページ目以降がすべて1ページ目と同じになってしまう。|teratail
表題の通り下記のコードにてカスタム投稿アーカイブ(archive-news.php)にページネーションのwp-pagenaviプラグインを導入してやってみたのですが、2ページ目以降は一件表示されているかと思ったのですがよく見たらページの内容がすべて同じでした。どこがおかしいでしょうか? 試したこと

'paged' => get_query_var( 'paged')の記述忘れですね。

 

しかしながら私の場合はと言うと、
‘posts_per_page’ としなければいけなかったところを、’post_per_page’としてしまっていました。

 

単なる誤字でした。

 

実際にないページのページネーションが表示されてしまう

この症状を改善する方法がなかなか見つけられなくて苦戦しました。

 

どういう症状なのか?

例えば、現在のページに対して、前後のそれぞれ2ページ分のページネーションを出したいという状況を想像してみてください。

 

現在5ページ目にいるとしたら、
3,4,5,6,7
と表示をさせたいわけです。

 

そしてもしMaxが7までで8,9が存在しなかったら、8,9は表示されてはいけないわけです。

 

しかし、表示されてしまったのです。
8,9まで。

 

8をクリックしたら404エラーです。

 

・・・なぜ・・・?

 

何をしていたか?

特定のカテゴリーの記事だけ表示させる、カテゴリーページを作っていました。
(もうここで、おや・・・?と気づいた方もおられると思います。)

$args = array(
//カテゴリーを複数指定するための記述
);
$the_query = new WP_Query( $args );

ということをして、特定のカテゴリーの記事だけ表示させるサブループを作りました。

 

そのカテゴリーページでページネーションを表示させようとしていまして、

【WordPress】プラグインなしで一覧ページのページネーションをシンプルに実装する方法
こんにちは、松井です。 WordPressはプラグインの豊富さが利点ですが、簡単にプラグインできるためカスタマイズや制御するのが知識がないとかえって大変です。 一覧ページに簡単に設置できるとして有名なものには、Wp-PageNaviがありますが、プラグインなしでも簡単に独自のページネーションが作成できるので、

こちらのWEBページを参考にさせていただき、作成していました。

 

※コピペだけでかなり近いところまでいけたのでとても助かりました。
ありがとうございました。

 

しかし、上記の症状のような、存在してはいけないページネーションが表示されてしまったのです。

あってはいけないものがある、、、怖いですね。

 

どうやって原因調査をした?

ver_dumpで、

$pages = $wp_query->max_num_pages;

のところで、$pages(全ページ数)がどのようになっているのかを調べました。

 

ちなみに、

$max_num_pagesとは、
ページの合計数。$found_posts を $posts_per_page で割った結果。

であり、

$found_postsとは、
現在のクエリ変数に一致する投稿の合計数。

だそうです。

 

話を戻しますと、
ver_dumpで表示をさせた$pagesの数字が、サブループではなくてメインループに対して表示されるべき数字になっていたのです。

 

それはそうですよね。
サブループをセットにしているページなのに、function.phpに記述した(コピペさせていただいた)内容はメインループを指定したものですからね。

 

ページがないのに、まるで存在するかのように、ページネーションが出てしまうわけでございます。

 

ということで、

global $wp_query;
         $pages = $wp_query->max_num_pages;//全ページ数を取得

の部分に対して、

global $the_query;
         $pages = $the_query->max_num_pages;//全ページ数を取得

としました。

 

これで無事に解決!!じゃんじゃん。でございます。
同じところでつまずく人が出ませんように。

 

以上、WordPressのページネーションをプラグインなしで作って苦戦した話、でした。

コメント

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