とあるお仕事でページネーション(ページャー)付きのアーカイブページを作成しようとしたら、なかなか機能せずかなり困ったので、僕が解決した方法を記録として残しておきます。また同じ事になった時の自分のためにも。。
目次
ページネーションが機能しなかった時の状況
Custom Post Type UIでカスタム投稿タイプを作成し、ページネーション(ページャー)付きのアーカイブページ作成する予定でした。
その時のソースコードはこんな感じです。
ループ部分
<?php $args = array( 'posts_per_page' => '5', //表示件数。-1なら全件表示 'post_type' => 'post_name', //カスタム投稿タイプの名称を入れる 'post_status' => 'publish', //取得するステータス。publishなら一般公開のもののみ 'orderby' => 'post_date', //日付順に並び替え 'paged' => $paged, //固定ページをアーカイブページにする ); $customPosts = get_posts($args); if ($customPosts) : foreach ($customPosts as $post) : setup_postdata($post); $terms = get_the_terms($post->ID, 'category_name'); foreach ($terms as $term) { $term_slug = $term->slug; }?> <a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>"> <p><?php the_time('Y.m.d') ?></p> <div <?php echo esc_html($term_slug); ?>> <?php $terms = get_the_terms(get_the_ID(), 'category_name'); if (!empty($terms)) : if (!is_wp_error($terms)) : ?> <?php foreach ($terms as $term) : ?> <?php echo $term->name; ?> <?php endforeach; ?> <?php endif; endif; ?> </div> <p><?php the_title(); ?></p> </a> <?php endforeach; ?> <?php else : //記事が無い場合 ?> <p>記事はありません。</p> <?php endif; wp_reset_postdata(); //クエリのリセット ?>
ページネーション部分
<div class="pager"> <?php global $wp_rewrite; $paginate_base = get_pagenum_link(1); if (strpos($paginate_base, '?') || !$wp_rewrite->using_permalinks()) { $paginate_format = ''; $paginate_base = add_query_arg('paged', '%#%'); } else { $paginate_format = (substr($paginate_base, -1, 1) == '/' ? '' : '/'). user_trailingslashit('page/%#%/', 'paged'); $paginate_base .= '%_%'; } echo paginate_links(array( 'base' => $paginate_base, 'format' => $paginate_format, 'total' => $wp_query->max_num_pages, 'mid_size' => 4, 'current' => ($paged ? $paged : 1), 'prev_text' => '≪', 'next_text' => '≫', )); ?> </div>
上記2つの組み合わせで、無事アーカイブの1ページ目とページネーションは出てきました。
しかし、2ページ目に行くと404エラーになり、ページがない!!
必死にコードを書き換えたり、ページネーションのプラグインを入れても、全然ダメでした。
2ページ以降がそもそも生成されなく、途方に暮れてました。
色々と調べていく中で、なんでこんな事に気づかなかったんだー!って感じで解決したので紹介していきます。
確認事項1:Custom Post Type UIの設定
Custom Post Type UIの設定画面から「投稿タイプを編集」を選択し、該当する投稿タイプを選びます。

ページ中段くらいにある設定の「アーカイブあり」を「True」に変更します。
※デフォルトでは「False」になっています

これで投稿タイプのアーカイブページが生成されるようになります。
この設定は当たり前というか、なんでこれに気づかなかったんだ。。って感じです。
しかし、僕の場合これだけでは解決せず、なぜか2ページ目には飛べるのに3ページ目以降になるとエラーになってしまいました。
確認事項2:WordPressの表示設定
WordPressの表示設定画面で、「1ページに表示する最大投稿数」をソースで書いた表示件数と同数かそれよりも少なく設定する。

<?php $args = array( 'posts_per_page' => '5', //表示件数。-1なら全件表示 'post_type' => 'post_name', //カスタム投稿タイプの名称を入れる 'post_status' => 'publish', //取得するステータス。publishなら一般公開のもののみ 'orderby' => 'post_date', //日付順に並び替え 'paged' => $paged, //固定ページをアーカイブページにする );
僕の場合はコードで書いた表示件数が「5」だったので、1ページに表示する最大投稿数は「5」以下にしなければいけなかったということです。
これは、かなり落とし穴でした。。
こうして無事解決することができました!
まとめ
今回は結局コードを一切書き換えることなく解決できました!!
また今回は最初から入れていましたが、
固定ページをアーカイブページにする場合、$argsの中に
「’paged’ => $paged」
を入れる必要があるので気をつけてください!
これではまってしまう人も多いです。
コーディングで行き詰った時って、一回放っておいて、次の日に作業するとなんであんなに悩んでいたんだと思うぐらいすぐ解決できることってよくありますよね。なので、僕は行き詰った部分があったら一回放っておいて、次の日作業するようにしています。
それでは!!
コメントを残す