paginate_comments_links()

paginate_comments_links()
目次

paginate_comments_links()とは?

paginate_comments_links() は、
コメント一覧のページ送りナビゲーションを「ページ番号つき」で表示する関数
です。

next_comments_link()previous_comments_link()は「前へ」「次へ」のみでしたが、
paginate_comments_links()1,2,3…とページ番号リンクを生成できます。

ブログやメディアサイトなど、コメント数が多い場合に非常に便利です。

paginate_comments_links()のページ送りの仕組み

コメントのページ送りを利用するには、まず設定が必要です。

有効化手順

  1. 管理画面 → [設定] → [ディスカッション]
  2. 「1ページあたり○件のコメントを含む」でページ分割を有効化
  3. 表示順やデフォルトページを選択
  4. 設定を保存

この設定を行った上で、paginate_comments_links()を使うとページ番号ナビが表示されます。

paginate_comments_links()の基本的な書式

paginate_comments_links( array $args = array() )

戻り値:

HTMLのナビゲーションリンクを出力します(echo)。
取得したい場合は get_paginate_comments_links()(5.3以降)を使用。

paginate_comments_links()の引数 $args の主なオプション

以下の表にまとめます。

パラメータ説明デフォルト
baseページ番号のURL形式add_query_arg('cpage','%#%')
formatページ番号のフォーマット空文字列
total総ページ数$wp_query->max_num_comment_pages
current現在のページ番号get_query_var('cpage')
prev_text「前へ」のテキスト«
next_text「次へ」のテキスト»
type出力形式 (plain, array, list)plain
end_size両端に表示するページ数1
mid_size現在ページ前後の表示数2
add_fragmentURL末尾に付けるフラグメント空文字列
echo出力するか (true or false)true

paginate_comments_links()のシンプルな使用例

<div class="comment-pagination">
  <?php paginate_comments_links(); ?>
</div>

これだけで基本的なページ番号が出力されます。

paginate_comments_links()のカスタマイズ例

たとえば、テキストと表示数を調整したい場合:

<div class="comment-pagination">
  <?php
  paginate_comments_links( array(
    'prev_text' => '« 前のコメント',
    'next_text' => '次のコメント »',
    'end_size'  => 1,
    'mid_size'  => 1,
  ) );
  ?>
</div>

paginate_comments_links()の出力形式のカスタマイズ (type)

typeを変更するとHTML構造が変わります。

説明
plain単純なリンクを連結した文字列(デフォルト)
list<ul><li>形式
array各リンクを要素とする配列(echoされず取得のみ)

list形式の例

paginate_comments_links( array(
  'type' => 'list',
  'prev_text' => '«',
  'next_text' => '»'
) );

出力されるHTML:

<ul class="page-numbers">
  <li><a class="prev page-numbers">«</a></li>
  <li><a class="page-numbers">1</a></li>
  <li><span aria-current="page" class="page-numbers current">2</span></li>
  <li><a class="page-numbers">3</a></li>
  <li><a class="next page-numbers">»</a></li>
</ul>

CSSで装飾しやすいのでおすすめです。

paginate_comments_links()のURLのカスタマイズ (base)

URLの形式を変えたいときに使います。

例:クエリパラメータではなく「フレンドリーURL」を使う場合

paginate_comments_links( array(
  'base' => trailingslashit( get_permalink() ) . 'comment-page-%#%/',
  'format' => '',
) );

この例ではURLが以下のようになります。

https://example.com/post-title/comment-page-2/

paginate_comments_links()の現在のページ (current)

currentは現在のページ番号を手動で指定できます。

通常はget_query_var('cpage')が使われますが、条件分岐などで制御する場合に便利です。

例:常に1ページ目を強制する

paginate_comments_links( array(
  'current' => 1
) );

paginate_comments_links()のURLフラグメント (add_fragment)

リンク先URLの末尾に自動でハッシュを追加できます。

例:

paginate_comments_links( array(
  'add_fragment' => '#comments'
) );

この場合、リンク先は

https://example.com/post-title/?cpage=2#comments

となります。

paginate_comments_links()の出力ではなく取得 (echo)

echofalseにすると、文字列で返します。

例:

$links = paginate_comments_links( array(
  'echo' => false
) );
echo '<nav class="comment-nav">' . $links . '</nav>';

テンプレートタグ内でラップする場合や条件分岐に便利です。

paginate_comments_links()のCSSでの装飾

type => 'list'を使った場合は以下のようにCSSを当てると見やすいです。

.comment-pagination ul {
  display: flex;
  gap: 8px;
  list-style: none;
  padding: 0;
}

.comment-pagination li a,
.comment-pagination li span {
  padding: 6px 10px;
  background: #eee;
  border-radius: 4px;
  text-decoration: none;
  color: #333;
}

.comment-pagination li span.current {
  background: #333;
  color: #fff;
}

get_paginate_comments_links()

WordPress 5.3 以降ではget_paginate_comments_links()が使えます。

これは「出力せず文字列を返す関数」です。

使い方は同じです。

例:

$html = get_paginate_comments_links(array(
  'type' => 'list'
));
if ($html) {
  echo '<nav class="comment-nav">' . $html . '</nav>';
}

paginate_comments_links()の注意点

  • コメントページ送りが有効になっていないと何も表示されません
  • コメント数が少ない場合もページリンクは生成されません
  • paginate_comments_links()はグローバル変数 $wp_query を利用しています
  • カスタムクエリでコメントを表示する場合は動かないことがあります

paginate_comments_links()のまとめ

paginate_comments_links()はコメントページネーションをきれいに整える強力な関数です。

ポイントをおさらい:

  • ページ番号ナビゲーションを一括生成
  • typeでHTML形式を柔軟に切り替え可能
  • prev_textnext_textでラベルを変更
  • baseformatでURL構造をカスタマイズ
  • get_paginate_comments_links()で文字列取得も可能

コメント数の多いメディアやコミュニティサイトには欠かせない機能です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

初めてホームページを作成したのは1996年。
2000年よりフリーランスで主に中小企業、学校、各種公的団体、個人事業主のWordPressを活用したホームページ制作を行っています。WordPressテーマはそれぞれのクライアントに合わせて作成しています。
WordPressを活用したサイト運営のための情報発信をしていきます。

目次