WordPressの管理画面で作成した固定ページをブログの記事の一覧ページにしたり、カスタム投稿タイプの一覧ページにしたりすることってよくあると思います。その場合、通常はWP_Queryを使って引数を渡してやることでサブループを生成して目的の記事のリストなどを作成することになります。
そのような場合に、記事のリストを表示させる固定ページにページネーションを追加したい場合、便利なプラグイン「WP-PageNavi」という有名なプラグインがありますよね。今回はそのWP-PageNaviとサブループの連携方法について解説します。
まず、WP_Queryを使用して簡単なサブループを作成します。
<?php
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$my_query = new WP_Query(array(
'paged' => $paged ,
'posts_per_page' => 10
));
?>
<?php if($my_query->have_posts()): while($my_query->have_posts()): $my_query->the_post(); ?>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br>
<?php endwhile;endif;
wp_reset_postdata();
?>
WordPressで企業サイトを構築している人なら見慣れたコードだと思います。
今回はこのコードにwp-pagenaviを使用したページネーションを導入します。
通常、wp-pagenaviを使用するときは、
wp_pagenavi();
だけで動作しますが、これはメインクエリをページネーションさせたい時の書き方となります。
WP_Queryを使用したサブループに対してwp-pagenaviを使用する場合は関数にクエリをパラメータとして渡してやる必要があります。今回の場合ですと、こんな感じになります。
wp_pagenavi(array('query'=>$my_query));
このようにwp_pagenavi関数にWP_Queryで作成したクエリを引数として渡してやります。
実際に運営中のブログやローカルで実験してみたらわかると思いますが、最初の例「wp_pagenavi();」だけではサブループのページネーションは表示されないはずです。
今回のサンプルで完成したコードは以下の通りです。
<?php
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$my_query = new WP_Query(array(
'paged' => $paged ,
'posts_per_page' => 10
));
?>
<?php if($my_query->have_posts()): while($my_query->have_posts()): $my_query->the_post(); ?>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br>
<?php endwhile;endif;
wp_pagenavi(array('query'=>$my_query));
wp_reset_postdata();
?>
11行目に
wp_pagenavi(array('query'=>$my_query));
を追加しました。
これで固定ページに作成した記事のタイトルのリストにページネーションを追加することができました。お試しあれ。
■参考ページ
http://scribu.net/wordpress/wp-pagenavi/wpn-2-74.html