主に技術的なことを書くブログ

浅めにマークアップ&フロントエンドの技術的なことをメモしていましたが、ざっくばらんに書いています。

WordPressでquery_postsを使ったページ送りでNot Foundになる件

WordPressで、下記のように、query_postsを使って1記事あたりに表示するエントリー数を設定したページのページ送りで「次のページ」がNot Foundになる件ですが(ややこしくてすいません)。

<?php query_posts($query_string .'&posts_per_page=表示させるエントリ数'); ?>

どうやら、下記のようなことが起こってるみたいです。

たとえば、全部で10件の投稿記事があるカテゴリで 管理画面での設定ページあたり10件になってるのに、 発行クエリでは以下のように2件だった場合、

$numPerPage = 2; if (have_posts()) :
query_posts($query_string.'&posts_per_page='.$numPerPage.'&cat=7');

発行クエリベースで考えると全部で5ページ(2件/1ページ)のアーカイブが生成されると思っても、 実際は2ページ目以降がnot foundになるようです。 よくわからないですが、1ページ目で設定に基づいて10件とってしまい、でも表示されるのはクエリ設定した 2件のみという状態になるみたいでした。 プログラムで直書きしてる2件という設定より管理画面での設定が優先されると言うことでした。

これ、正直何言ってるのかわからないんですが、結局のところ、query_postsで1記事あたりに表示するエントリー数をカテゴリーや、タグごとに設定して、かつ、管理画面の「表示設定」>「1ページに表示する最大投稿数」をquery_postsの最大数よりも多く設定して、かつ、そのカテゴリーの記事数が、次のページの最大を満たさない場合に起こるようなのです(この辺は曖昧です;)。

例えば、「おもしろ」というカテゴリーで表示する記事の数をquery_postsで「5件」として、投稿数がまだ7件だった、しかし、管理画面の設定では「10件」としている、といった時に、「おいおい、次のページ、記事数足りひんから作れへんやん」ということで、起こるようです。

なので、管理画面の設定を「1」にして、それぞれの投稿数に細かく設定すればちゃんとページ送りが機能するみたいなのですが、どうないでしょうか。とりあえず、僕はこれで解決しました。