wp pagenavi で2ページ目が404になる
条件
1.カスタム投稿タイプを使っている 2.カスタム投稿タイプではポストと同じカテゴリーが使える 3.カテゴリーはネストされていて、孫カテゴリーまで存在する 4.category.phpで記事一覧を出す。 5.category.phpにはページネーションをつける
最初にやっていたこと
孫カテゴリーのアーカイブにいるときに、親カテゴリーか、そのさらに上の階層のカテゴリーを見てポストタイプを変えたかったので、WP_Queryを使って一覧を吐き出していた。
すると、ページネーションの2ページ目で404が発生。
paged => $paged がないからかと思ったけども、違う。
結論から言うと、アーカイブのテンプレートでWP_Queryで一覧を出してしまうと、ページネーションがきかないらしい。
ということでメインループで一覧を吐き出すべくpre_get_postの設定をする。
その前に、そもそもメインループ回したら、どんな一覧が表示できるのよ?と思って、if(have_posts())...を書いたら、何も表示されない。 なんで表示されないのかと悩むこと小一時間。 試しにポストの記事にカテゴリーを付けてリリースしたら、そちらは一覧に表示される。 つまり、普通の投稿タイプはちゃんと表示されて、カスタム投稿タイプにあてているカテゴリーは一覧に表示されないことがわかった。 pre_get_postでpost_typeをちゃんと指定しないといけない。
でもそれやると、今度は普通の投稿タイプの時にカテゴリー一覧が表示されない。
ということで行き着いたコードがこちら
function custom_query($query){ if(is_admin() || ! $query->is_main_query()) return; if( $query->is_category()){ $cat = get_queried_object(); if($cat->parent != 0){ $cat = get_category($cat->parent); $type = $cat->slug; if($type == 'hoge'){ $post_type = 'hoge'; }else{ $post_type = 'hage'; } $query->set('post_type', $post_type); $query->set('posts_per_page', '20'); $query->set('meta_key', 'yomi'); $query->set('meta_value', ''); $query->set('orderby', 'meta_value'); $query->set('order', 'asc'); return; }else{ $query->set('posts_per_page', '20'); $query->set('meta_key', 'yomi'); $query->set('meta_value', ''); $query->set('orderby', 'meta_value'); $query->set('order', 'asc'); return; } } } add_action('pre_get_posts', 'custom_query');
カスタム投稿タイプだろうが、普通の投稿タイプだろうが カテゴリーアーカイブでは、カテゴリに属するものがメインループで表示されるだろうと思い込んでいたんだよな…










