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