読者です 読者をやめる 読者になる 読者になる

TRANS

神戸のNPOやソーシャルビジネスの創業・起業のお手伝い

フロントページでページネーションをやりたい場合

WordPress

フロントページにページを設定し、そこでページネーションをやりたい場合に気をつけないといけないこと。

ページにquery_postsを使って、何件か記事を抽出して、さらにその下にWP-pageNaviを使う場合は一般的にこんなふうになります。

<dl>
<?php query_posts('cat=1&post_type=post&paged='.$paged); ?>
<?php if (have_posts()) :while (have_posts()): the_post(); ?>
<dt><?php the_time('Y年n月j日'); ?></dt>
<dd><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></dd>
<?php endwhile; endif; ?>
</dl>
<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>
<?php wp_reset_query(); ?>

query_posts内で、paged=.$pagedを指定してやること。また、wp_pagenaviよりもあとでwp_reset_query()を指定して、クエリをリセットしてあげること。

しかし、フロントページにページを指定し、そのページでwp_pagenaviを使いたい場合はちょこっと異なります。

<dl>
<?php $paged = (get_query_var('page')) ? get_query_var('page') : 1;
query_posts('post_type=post&paged='.$paged); ?>
<?php if (have_posts()) :while (have_posts()): the_post(); ?>
<dt><?php the_time('Y年n月j日'); ?></dt>
<dd><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></dd>
<?php endwhile; endif; ?>
</dl>
<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>
<?php wp_reset_query(); ?>

フロントページの場合のみ「paged」ではなく、「page」を使うらしい。リファレンスには以下のように書いています。

For getting the current pagination number on a static front page (Page template) you have to use the 'page' query variable:

フロントページにページネーションを設置するというのはあまりないと思うのですが、今回はマルチサイトを使っていて、子サイトのフロントページに記事の一覧を並べようとしていました。ここで見事にコケました。

日本語で延々とググったのですが、どの方法も全然うまくいきませんでした。最初からリファレンスを読んでおけばこんなに時間をムダにすることもなかったのに…。