はじめに
Cocoon設定の「インデックス」で、フロントページタイプを「タブ一覧」に設定している場合、通常は「新着記事」以外のカテゴリータブにはページネーションではなく「もっと見る」ボタンが表示されます。
以下の記事では、カテゴリータブの「もっと見る」ボタンから2ページ目へ直接遷移させる方法を紹介しました。
そこで今回はさらに一歩進めて、「新着記事」タブと同様にカテゴリータブにもページネーションを表示させ、全体のデザインと操作性を統一します。
この記事では、この方法について説明します。
「もっと見る」と「ページネーション」の比較
フロントページタイプ「タブ一覧」において、カテゴリータブのナビゲーションをどのようにカスタマイズするかによって、訪れたユーザーの記事の探しやすさやサイト全体の統一感が大きく変わります。
全アプローチに共通する課題として、カテゴリーページに一度移行した後は1ページ目をクリックしても新着記事タブのようにフロントページに戻るわけではない点に留意しつつ、主な3つの方法の特徴をまとめました(表1参照)。
| # | パターン | メリット | デメリット |
|---|---|---|---|
| 1 | 現行(1ページ目へ遷移) |
|
|
| 2 | 「もっと見る」2ページ目化 |
|
|
| 3 | ページネーション化 |
|
|
ページネーション化を導入するメリット
「もっと見る」ボタンを2ページ目化する方法もシンプルで優れていますが、本記事で紹介するページネーション化には、サイト全体の完成度を高める大きな特徴があります。
- 「新着記事」タブとの完全なデザイン統一
- カテゴリー内の過去記事への直接アクセス(高い回遊性)
サイト全体のナビゲーション領域に統一感を持たせつつ、読者が過去記事を探しやすくしたい場合に非常に効果的です。
完成イメージ

実装手順
以下の手順で実装しまs。
- ラベルPHPを追加
以下のコードをfunctions.phpに追加します。
add_filter('cocoon_part__tmp/list-tab-index', function ($content, $name, $args) { if (!is_front_page_type_tab_index()) { return $content; } // タブに表示するカテゴリIDを取得 $cat_ids = get_index_list_category_ids(); if (empty($cat_ids)) { return $content; } // 最大表示タブ数を取得 $cat_count = apply_filters('cocoon_index_max_category_tab_count', 3); global $wp_rewrite; $number = 1; $target_cats = array_slice($cat_ids, 0, $cat_count); foreach ($target_cats as $cat_id) { // カテゴリなしは処理対象外 if (!is_category_exist($cat_id)) { continue; } $number++; // カテゴリの総ページ数を取得 $query = new WP_Query([ 'post_type' => 'post', 'posts_per_page' => get_option_posts_per_page(), 'cat' => (int) $cat_id, 'category__not_in' => get_archive_exclude_category_ids(), 'post__not_in' => get_archive_exclude_post_ids(), 'no_found_rows' => false, ]); // 1ページ以下は処理対象外 if ($query->max_num_pages <= 1) { continue; } $category_link = esc_url(get_category_link($cat_id)); $is_permalink = $wp_rewrite->using_permalinks(); // 2ページ目のURLを設定 $next_url = $category_link; if ($is_permalink) { $next_url = user_trailingslashit(trailingslashit($next_url) . 'page/2', 'paged'); } else { $next_url = add_query_arg('paged', 2, $next_url); } $next_caption = apply_filters('pagination_next_link_caption', __('次のページ', THEME_NAME)); ob_start(); ?> <div class="pagination-next tab-category-pagination"> <a href="<?= $next_url; ?>" class="pagination-next-link key-btn"><?= $next_caption; ?></a> </div> <div class="pagination tab-category-pagination"> <?= paginate_links([ 'base' => $category_link . '%_%', 'format' => $is_permalink ? user_trailingslashit('page/%#%', 'paged') : '?paged=%#%', 'total' => $query->max_num_pages, 'current' => 1, 'mid_size' => 1, 'prev_text' => '<span class="screen-reader-text">' . __('前へ', THEME_NAME) . '</span><span class="fa fa-angle-left" aria-hidden="true"></span>', 'next_text' => '<span class="screen-reader-text">' . __('次へ', THEME_NAME) . '</span><span class="fa fa-angle-right" aria-hidden="true"></span>', ]); ?> </div> <?php $pagination_html = ob_get_clean(); // 対象タブの「もっと見る」ボタンをページネーションに置換 $content = preg_replace( '/(<div class="tab-cont tb' . $number . '">.*?)(<div class="list-more-button-wrap">.*?<\/div>)/s', '$1' . $pagination_html, $content ); } return $content; }, 10, 3); - ラベルCSSを追加
以下のコードをstyle.cssに追加します。
.tab-category-pagination { display: block !important; } .tab-cont:has(.tab-category-pagination) .list { margin-bottom: 3rem; }
さいごに
今回紹介した方法を使えば、Cocoonのフロントページ「タブ一覧」において、カテゴリーごとの表示を「もっと見る」ボタンから使いやすいページネーションへと変更することができます。
新着記事タブとデザインが統一されることでサイト全体の美観が向上するだけでなく、ユーザーがアーカイブページに移動することなくシームレスに過去記事を探せるようになります。
