Wordpress > カテゴリ・アーカイブページのページングで2ページ目以降が404

WordPress 3.4.1

不具合の内容

  • 特定カテゴリ内の記事一覧(category.php)の2ページ目以降で404が出る
  • 404が出つつも、2ページ目の内容が表示される
  • カテゴリが認識されずに全カテゴリの投稿が表示される

その際の不具合の出るソースは以下。ページングリンクの記述( my_paging_nav )は長いのでfunctions.phpに書いてる。

$paged = get_query_var('paged');
query_posts('posts_per_page=2&paged='.$paged);
if ( have_posts() ) :
    my_paging_nav();
    while ( have_posts() ) : the_post();
        the_excerpt ();
    endwhile;
    my_paging_nav();
endif;
 
Post Type Category Pagination FixプラグインやTop Level Categories Fixプラグインなど、試してみたが解決せず。
query_posts() を使うと query が破壊されるという話を読み、WP_Query() を使ってみるも、ダメ。



管理画面の設定→表示設定の表示する最大投稿数を1、又は-1にする

その通りやってみると、確かに404は出なくなった。


しかし、相変わらず、カテゴリが認識されていない。そこで、デフォルトテーマ twentyeleven の category.php を覗いてみる。
はて?1ページごとの投稿数や今何ページ目かといった指定をする記述がない。私のソースでいうここ

$paged = get_query_var('paged');
query_posts('posts_per_page=2&paged='.$paged);
 


そこでひらめいた。本来1ページに何件表示するかは、「管理画面の設定」→「表示設定」の「表示する最大投稿数」で指定しておけば良いのだわ。

正解
if ( have_posts() ) :
    my_paging_nav();
    while ( have_posts() ) : the_post();
         the_excerpt ();
    endwhile;
    my_paging_nav();
endif;
 
これだけで良かった。ページングのURLに飛びさえすれば、ページングの処理自体は、wordpress が勝手にやってくれてた。the_post() 内でやってるんだろう。


ちなみに、これでもいけた。でも冗長だよね。

$paged = get_query_var('paged');
$category_name = get_query_var('category_name');
query_posts('posts_per_page=2&paged='.$paged.'&category_name='.$category_name);
if ( have_posts() ) :
    my_paging_nav();
    while ( have_posts() ) : the_post();
        the_excerpt ();
    endwhile;
    my_paging_nav();
endif;
 




最終更新:2012年10月17日 16:26