WP-PageNaviでアーカイブページにページネーションを出す

WP-PageNaviでアーカイブページにページネーションを出すって
今までも何度もしているのになんか毎回つまづいている気がします。

 

1度やって期間があくと忘れてしまってて
以前やったソースを見てみるんですけどスマートなソースじゃない。
(あっちこっち見てソース書き換えてるからかコメントアウトがいっぱい笑)

 

ということで今回はカスタム投稿タイプの場合でアーカイブページを作成した際に
WP-PageNaviというプラグインを使用してページネーションを出す場合のやり方を
備忘録として書いておきます。

 

いろんな方がいろんな記事でおなじようなところでぶつかって書いてくださってるのですが
少しづつ書き方が違う気がしているので、どれを参考にするかお好きに判断してください。

 

では早速ソースを…


<div class="wrap">
	<ul>
	<?php
	$args = array(
	'paged'          => $paged,
	'post_type' => 'member',
	'posts_per_page' => 6,
	); 
	$my_query = new WP_Query($args);
	if ($my_query->have_posts()) :
	while ($my_query->have_posts()) : $my_query->the_post();
	?>

	<li>
	//ここに繰り返しのソースを記載する
	</li>

	<?php endwhile; ?>

	<ul>
</div>
<?php wp_reset_query();endif; ?>

<?php if(function_exists('wp_pagenavi')) wp_pagenavi(array('query' => $my_query));?>

 

じゃあ1つ1つ説明します。

まず

 

<?php
$args = array(
'paged'          => $paged,
'post_type' => 'カスタム投稿タイプの名前',
'posts_per_page' => 6,
); 

$my_query = new WP_Query($args);
if ($my_query->have_posts()) :
while ($my_query->have_posts()) : $my_query->the_post();
?>

 

この部分。

$argsは値が混在した引数の配列を記すことができます。
なのでその次に「配列」という意味のarrayが来ていますよね。
この書き方をすると「複数の配列を記載しますよー」という宣言?のような感じになります。

 

この中に

 

'paged'          => $paged, //WP-PageNaviの場合は必ず記載
'post_type' => 'member', //例えばカスタム投稿タイプがメンバーの場合はここにmemberを記載
'posts_per_page' => 6, //1ページにいくつ表示させるか、すべて表示させる場合は-1を入れる

 

上記のような配列を記載します。

 

$my_query = new WP_Query($args); //$argsの中に入っている配列を指定
if ($my_query->have_posts()) ://もし$my_queryの投稿があったら…
while ($my_query->have_posts()) : $my_query->the_post(); //ループがはじまるよー

//ここに内容がうんぬんかんぬん~

endwhile; //ループがおわったよ~

ここで$my_queryという変数を、WPで指定されているグローバル変数 $wp_query に、現在のリクエストを定義する情報を与えます。
つまり、$my_queryは新しい情報の指定です。
WPにどのタイプのクエリを扱っているのかを確定し、要求されたデータを取り出してもらえるよう指示しています。

指示をしたあとに、繰り返してほしいループ開始の指示をして
最後にループ終了の指示をします。

 

最後に


<?php wp_reset_query();endif; ?>

 

WP_Query:the_post()はグローバル変数である$postを上書きするため「wp_reset_postdata();」でリセットしてあげます。
この記載を忘れずに!

最後にページネーションを出してあげたい部分に

<?php if(function_exists('wp_pagenavi')) wp_pagenavi(array('query' => $my_query));?>

を記載してあげればOKです!

 

以上!

でこれで表示されたー!と思ったら…

 

2ページ目以降が404で出ない

はぁー!もうほんと勘弁してください。
やっとできたと思ったのに!

 

と、実は今回はここからが苦戦しました。
そしていろんなかたのブログを読み漁って、共通でわかったのが
カスタム投稿タイプのパーマリンク設定が/%postname%/になってると404になるよ!ってこと…

 

は?どうすればいいの?とイライラしました笑
Wordpressの管理画面から
設定>パーマリンク設定 をみると確かにカスタム投稿タイプのアーカイブの設定が/%postname%/に
なってました。

 

でここいじって更新しても改善されず…。
なんやかんややってたんですが、調査していくと衝撃的事実が・・・・!!!

 

実は
設定>表示設定>1ページに表示する最大投稿数が

 

'posts_per_page' => 6, //1ページにいくつ表示させるか、すべて表示させる場合は-1を入れる

 

の数字と違うと2ページ目以降が404になるということがわかりました…。

 

設定>表示設定>1ページに表示する最大投稿数を6に変更すると無事
2ページ目以降も表示されました~

あー疲れた!

 

同じようなところで息詰まっている方の参考になれば幸いです!
では!