wp_list_comments()

wp_list_comments()
目次

wp_list_comments()とは?

wp_list_comments() は、
コメント一覧をHTMLとして出力するためのテンプレートタグ
です。

コメントをループで処理する必要はなく、この関数ひとつで

  • 各コメントの表示
  • コメント階層(返信ツリー)
  • コメントのメタ情報(日時、著者、アバター)

を一括で出力できます。

テーマの comments.php テンプレートで必ず使われている代表的な関数です。

wp_list_comments()の基本的な使い方

書式はとてもシンプルです。

<?php wp_list_comments( array $args = array(), $comments = null ); ?>

wp_list_comments()の引数の解説

wp_list_comments()は非常に多機能で、以下の2つのパラメータを受け取ります。

  1. $args(オプション配列)
    • 出力形式やコールバックなどを指定
  2. $comments(コメントオブジェクトの配列)
    • デフォルトはget_comments()の結果が自動で使用されます

基本的に $args だけ指定すればOKです。

wp_list_comments()のよく使う $args の主な項目

パラメータ説明デフォルト
walkerカスタムWalkerクラス
max_depth階層の最大深さ3
styleul, ol, div でリスト形式を指定ul
callbackカスタムコールバック関数
end-callback終了用のコールバック
type表示するコメントの種類(all, comment, trackback, pingbackall
avatar_sizeアバターのサイズ(px)32
short_pingピンバック・トラックバックを簡潔に表示false
reverse_top_levelコメントの並び順を逆にするnull
reverse_children子コメントの並び順を逆にする
per_page1ページあたりのコメント数0(全件)
page表示するページ番号
formatHTML5かXHTMLかhtml5
echo出力するか返すか1(出力する)

wp_list_comments()のシンプルな例

もっとも基本的な使い方は以下です。

<ol class="comment-list">
  <?php wp_list_comments(); ?>
</ol>

これだけで、現在の投稿のコメントが自動的にリスト出力されます。

wp_list_comments()のコメントリストの出力例

デフォルトでは以下のようなHTMLが出力されます。

<ul class="comment-list">
  <li id="comment-1" class="comment">
    <article>
      <footer class="comment-meta">
        <div class="comment-author vcard">
          <img src="..." class="avatar" width="32" height="32">
          <b class="fn">ユーザー名</b>
          <span class="says">says:</span>
        </div>
        <div class="comment-metadata">
          <a href="...">
            <time datetime="...">投稿日</time>
          </a>
        </div>
      </footer>
      <div class="comment-content">
        コメント本文
      </div>
      <div class="reply">
        <a rel="nofollow" class="comment-reply-link" href="...">返信</a>
      </div>
    </article>
  </li>
</ul>

アバター・著者・日時・本文・返信リンクが自動生成されます。

wp_list_comments()のstyle の指定

コメントリストのHTML要素を変更できます。

style の値出力されるタグ
ul<ul>(デフォルト)
ol<ol>
div<div>

例:

wp_list_comments(array(
  'style' => 'ol'
));

アバターサイズを変更

avatar_sizeを指定すると、アバターの大きさを変更できます。

wp_list_comments(array(
  'avatar_size' => 64
));

コメントの種類

typeで表示するコメントの種類を制御できます。

type の値内容
allコメント・ピンバック・トラックバックを全て表示
comment通常のコメントだけ
pingbackピンバックのみ
trackbackトラックバックのみ

例:コメントだけ表示

wp_list_comments(array(
  'type' => 'comment'
));

wp_list_comments()のカスタムコールバック

デザインを自由にしたいときは callback を指定します。

コールバックの例

my_comment_template()という関数を用意し、引数にコメントオブジェクトが渡されます。

function my_comment_template($comment, $args, $depth) {
  $GLOBALS['comment'] = $comment;
  ?>
  <li <?php comment_class(); ?> id="comment-<?php comment_ID(); ?>">
    <div class="comment-author vcard">
      <?php echo get_avatar($comment, 48); ?>
      <?php printf('<cite>%s</cite>', get_comment_author_link()); ?>
    </div>
    <div class="comment-meta">
      <?php printf('<a href="%1$s">%2$s</a>',
        esc_url(get_comment_link($comment->comment_ID)),
        get_comment_date()
      ); ?>
    </div>
    <div class="comment-text">
      <?php comment_text(); ?>
    </div>
    <div class="reply">
      <?php comment_reply_link(array_merge($args, array(
        'depth' => $depth,
        'max_depth' => $args['max_depth']
      ))); ?>
    </div>
  </li>
  <?php
}

wp_list_comments()で指定:

wp_list_comments(array(
  'callback' => 'my_comment_template'
));

これで完全に独自HTMLを出力できます。

wp_list_comments()のページ分割

コメントページ送りを有効にすると、per_pagepageで制御できます。

例:

wp_list_comments(array(
  'per_page' => 10,
  'page' => 1
));

ページネーションのリンクは paginate_comments_links() で表示します。

wp_list_comments()の階層の深さ

max_depthで子コメントの最大階層を設定。

例:2階層まで

wp_list_comments(array(
  'max_depth' => 2
));

wp_list_comments()の出力を取得する

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

$html = wp_list_comments(array(
  'echo' => false
));
echo '<div class="comments-wrapper">'.$html.'</div>';

Walkerクラス

コメントの構造をさらに詳細に制御する場合、walkerに独自クラスを指定します。
通常は必要ありませんが、階層コメントをカスタムHTMLで制御したい場合に便利です。

wp_list_comments()のよくある質問

コメントが表示されない

$commentsが空、またはcomments_template()を呼んでいない可能性があります。

コメントフォームはどうする?

コメント送信用フォームは comment_form() を使います。

コメントをすべて平坦に表示できる?

max_depth1に設定すれば階層を無効化できます。

wp_list_comments()のまとめ

  • wp_list_comments()はコメント一覧表示のメイン関数
  • デフォルトでHTML5形式のマークアップを生成
  • style, avatar_size, typeで表示を簡単に調整
  • callbackで完全なカスタムデザインが可能
  • ページ分割や階層も柔軟に制御できる

活用ポイント

  • デフォルトテンプレートでも十分高機能
  • オリジナルデザインはcallbackで対応
  • コメント数が多い場合はpaginate_comments_links()と組み合わせる
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

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

目次