WP-PageNaviの2ページ目以降で起こる404エラーの回避方法

2013年12月12日 Wordpress NAndo

WP-PageNavi プラグインを使う

WordPressユーザーにはお馴染みのプラグインWP-PageNaviを使ってページネーションを追加します。

WP-PageNavi

WP_Queryでクエリを変更するとWP-PageNaviが動作しない場合がある

クエリを変更する事により、WP-PageNaviのページネーションが表示されない問題が発生する場合があります。
例えば、固定ページでカスタム投稿のブログ記事を一覧表示する場合、WP_Queryでクエリを変更します。

<?php 
	$args = array(
	'post_type' => 'カスタム投稿名',
	'paged' => $paged,
	'posts_per_page' => 5
	);
	
    $the_query = new WP_Query($args);
 ?>
 
<?php if($the_query->have_posts()): ?>
<div>
    <ul>
		<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
		<?php endwhile; ?>
    </ul>
</div>
<?php endif; ?>

<?php wp_pagenavi(); ?> // WP-pagenavi

一般的なWP_Queryでクエリを変更したループ処理です。

WP-PageNaviが表示されない時の対応方法

wp_pagenavi();のコードを以下に差し替えてみてください。

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

array('query' => $the_query)の部分で、クエリを正しく引っ張ってきています。

こちらのサイトを参考にさせていただきました。
WP_Queryを使用してWP-PageNaviでページナビを表示

正常にWP-PageNaviが表示され、2ページ目以降のリンクが生成されたはずです。

しかし、本当に恐ろしい問題はここからでした。
次からが本題となります。

2ページ目以降「404 ページがありません」と出る

カスタム投稿「item」を追加したとします。
そしてカスタム投稿「item」記事を、固定ページに表示させたいとします。
心情的には、固定ページのスラッグを「item」にし、http://example.com/items/というURLで表示したいところです。

するとこうなります。

WP-PageNavi 404 ページがありません と出るイメージ

原因はパーマリンクだった

パーマリンク設定を%postname%にしているとこの現象が起こります。

カスタム投稿のアーカイブページは、カスタム投稿作成時点のデフォルトで、http://example.com/item/として表示されます。
ところが、固定ページのitemで上書きしてしまう為、2ページ目以降のhttp://example.com/item/page/2/では、分割された固定ページ(実際には分割してない)を参照してしまうのです。

固定ページのスラッグとカスタム投稿のスラッグを同じ文字列で設定してはダメ!絶対!!

404エラー解決方法

固定ページのスラッグをitemではないものにしましょう。

例えばitemsとか複数形にしてみるとか。

自動生成のスラッグと、任意で付けたスラッグが被ってしまうと、思わぬ不具合が起きてしまうものですね。