HOME > WordPress > プラグインを使わないページネーションが表示されない件

プラグインを使わないページネーションが表示されない件

プラグインを使わずにページネーションを表示する場合、コリスさんのWordPressにプラグイン無しでページネーションを設置する方法 | コリスを使っています。

	<?php 
	if (function_exists("pagination")) {
	kriesi_pagination($additional_loop->max_num_pages);
	} ?>

additional_loopのところをwp_queryにしても同じ。

	<?php 
	if (function_exists("pagination")) {  
	pagination($wp_query->max_num_pages);  
	}
	?>

これはたとえばカスタム投稿タイプのarchive-×××.phpでは表示されますが、固定ページでarchive-×××.phpというテンプレートを選択して記事一覧を表示させる場合は、全く表示されませんでした。

原因はページに記述した表示記事数とWPの表示設定が異なっていること

長く放置していたこの件、原因がわかりました。

ページネーションを設置しているページのテンプレートには、get_posts(‘post_type=hoge&posts_per_page=1’);posts_per_page=1と書いていました。これがWPの表示設定と違っていて、なおかつ投稿数がWPの表示設定数に足りていないことが原因でした。

たとえばWPの表示設定では表示記事数を3としているのに、posts_per_page=1で表示記事数を1としているとします。この場合、投稿総数が3記事以下の場合、WPの表示設定の表示記事数=3が基準となり、そのページがposts_per_page=1としていても、ページネーションは表示されません。
※4記事以上投稿すると、ページネーションは表示されるようになります(しかし、ページに表示される記事数にはposts_per_page=1が効いているので、。2記事目3記事目は記事一覧に表示されません)。

posts_per_page=1を削除すれば問題は解決します。また、posts_per_page=2とすれば、上手くいく方法はありました(こちらの記事→ページネーション(ページャー)が動かない!!wordPressの意外な落とし穴 | XTRA BLOG)。

しかし、posts_per_page=1のままでうまくいく方法は見つけられていません。

【追記】
taxonomy-{ターム名}.phpにおけるページネーションの2ページ目以降が404になるでpre_get_postsを使うべし、という書き込みがあり、【wordpress】pre_get_postsを使ってみませんか?がわかりやすかった。そもそもpre_get_postsを使えばこの悩みからは解放されそう。

参考にしたサイト