実現したいこと
個々の投稿の一覧ではなく、全コメントの一覧の上位数件を表示する、いわゆる「新着コメント」。
コメントへの返信が明確にわかるように、階層構造を持たせたい。
下の画像がその完成イメージ。
sidebar.phpへの記述
sidebar.phpの任意の位置へ下記のコードを記述する。
<?php
$arg = array(
'per_page' => 20,// 1ページに表示するコメントの数
'max_depth' => '3',// コメントの階層
'type' => 'comment',// 表示するコメントの種類
'reverse_children' => true,// trueでコメントの下に子コメント(返信)を新しい順に表示
'callback' => 'my_comment',// 各コメントの開始タグと内容を表示するカスタム関数の名前
);
wp_list_comments($arg, get_comments());
?>
「wp_list_comments()」 は投稿や固定ページのコメントの一覧を表示するテンプレートタグ。
第一引数はパラメーター(配列)。
「callback」で任意のカスタム関数を指定することにより、表示を自由に操ることができる。
第二引数は戻り値(配列)。いずれもオプションで、省略時はwordpressの内部機能が使用される。ここではコメントのリストを取得する関数「get_comments() 」を使用。引数を与えないことでブログ全体(特定の投稿ではなく)からのコメントを得ることができる。
functions.phpへの記述
「wp_list_comments()」のパラメータで指定したコールバック関数「my_comment」を、functions.phpの任意の場所に記述する。
//コメント一覧用の表示を提供するコールバック関数
function my_comment($comment) {
?>
<li <?php comment_class(); ?>>
<a href="<?php echo get_permalink($comment->comment_post_ID); ?>#comment-<?php comment_ID();?>">
<?php
if($comment->comment_parent != 0){
echo '<i class="fa fa-level-down fa-rotate-180" aria-hidden="true"></i>';
}
?>
<i class="fa fa-user"></i>
<?php echo get_comment_author(); ?> さんのコメント
(<?php comment_date('Y年n月j日', get_comment_ID()); ?>)<br />
<?php
$post_data = get_post($comment->comment_post_ID);
echo $post_data->post_title;
?>
<br />
<?php
$my_comment_content = strip_tags(get_comment_text());
if(mb_strlen($my_comment_content,"UTF-8")>100) {
$my_comment_content = mb_substr($my_comment_content,0,100);
$my_comment_content .= '...';
}
?>
<i class="fa fa-commenting"></i>
<?php echo $my_comment_content; ?>
</span>
</a>
<?php
}