※この記事は2014年8月作成で、WPバージョン3.7.1とかそのくらいの頃の話になりますのでご注意ください。
--
WP_Queryを使って固定ページで特定のカテゴリとか投稿タイプとかの一覧をとって、それをページングさせようとしたときにわりとすんなり言ってくれなかったメモ。
$queryとか$max_num_pageとかがうまくglobalのやつに入ってくれないっていうのが問題っぽかった。
※'/hoge'が1ページ目であるということがわかっている前提に作られています。
<?php
global $post; // これは取れる
global $paged; // これも取れる
global $max_num_page; // これが取れない
$list = new WP_Query("category_name=hoge&paged=$paged");
$max_num_pages = $list->max_num_pages; // これで取れる
if($list->have_posts()): while($list->have_posts()): $list->the_post();
// ループ処理
endwhile;
// ループのあとにページネーション
?>
<nav>
<?php if($paged > 1): //最初のページと前のページ ?>
<a class='page' href="/hoge/">«</a>
<a class='page' href="/hoge/page/<?php echo($paged - 1) ?>"><</a>
<?php endif; ?>
<?php for($i = 1; $i <= $max_num_pages; $i++): // 各ページ ?>
<?php
if($i == $paged){
echo "<span class='page current'>$i</span>";
} else {
if($i == 1) echo "<a class='page' href='/hoge/'>1</a>";
else echo "<a class='page' href='/hoge/page/$i'>$i</a>";
}
?>
<?php endfor; ?>
<?php if($paged < $max_num_pages): // 次のページと最後のページ ?>
<a class='page' href="/hoge/page/<?php echo $paged + 1 ?>">></a>
<a class='page' href="/hoge/page/<?php echo $max_num_pages ?>">»</a>
<?php endif; ?>
</nav>
<?php
endif; wp_reset_query();
?>
クラスとスタイルはまぁ適宜。
ただしこれだと全ページが出ちゃいますので注意してください。
時間なかったのでパパッとやっちゃったけど、functions.phpに入れられるような形にしてもよかった。