WordPress のコメントの表示に関する個人的なメモ。
目次
single.php の例
...
</div><!--/#content -->
<div class="postlink">
<p class="fLeft"><?php previous_post_link('%link', '« %title'); ?></p>
<p class="fRight"><?php next_post_link('%link ', '%title » '); ?></p>
</div><!-- end of .postlink -->
<?php comments_template(); ?><!--はコメントテンプレートの読み込み -->
</div><!--/#main -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
テンプレートファイル名の指定
comments.php 以外のテンプレートを読み込むときは、comments_template() の第1パラメータに指定。その際に「/」を付ける。
<?php comments_template('/single_comments.php'); ?>
コメント・トラックバックの分離
コメントとトラックバックを分けて出力するには、第2パラメータに「true」を指定する。
但し、コメントとトラックバックを分けるには、コメントテンプレート側で、そのための処理が必要。
<?php comments_template('', true); ?>
コメントの一覧を出力するには wp_list_comments() を使用する。
以下のようにパラメータを指定せずに記述すると、コメント・トラックバックが混在した一覧が出力される。
<?php wp_list_comments(); ?>
デフォルトのパラメータ
<?php $args = array(
'walker' => null,
'max_depth' => '',
'style' => 'ul', //コメント一覧を囲むタグを指定
'callback' => null, //個々のコメントの出力処理のコールバック関数名
'end-callback' => null,
'type' => 'all', //タイプ(※)を指定
'reply_text' => 'Reply', //返信用リンクの文字列
'page' => '',
'per_page' => '',
'avatar_size' => 32,
'reverse_top_level' => null, //true を指定すると最も新しいコメントから出力
'reverse_children' => '',
'format' => 'html5', //or xhtml if no HTML5 theme support
'short_ping' => false // @since 3.6,
'echo' => true // boolean, default is true
); ?>
タイプ(※)は以下が指定可能
例えば、個々のコメントを「comlist」というコールバック関数を使って出力する場合は以下のように記述する。
<?php wp_list_comments('callback=comlist'); ?>
コールバック関数は通常 functions.php に記述。
//コールバック関数の形式
function コールバック関数名($comment, $args, $depth) {
$GLOBALS['comment'] = $comment; ?>
個々のコメントを出力する処理
<?php
}
パラメータ:
$comment : コメントの内容を表すオブジェクト
$args : wp_list_comments() のパラメータに渡した連想配列
$depth : コメントの深さ(通常のコメントは深さが 1、返信は 2、その返信は 3…)
個々のコメントを出力する処理では、wp_list_comments() によって自動的に </li> が挿入されるのでコールバック関数内で </li> の記述は不要。
コールバック関数の例
//functions.php に記述
function comlist($comment, $args, $depth) {
$GLOBALS['comment'] = $comment; ?>
<li class="compost">
<div id="comment-<?php comment_ID(); ?>">
<?php comment_text(); ?>
<div class="reply">
<?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => 3))); ?>
</div>
<p class="cominfo">
<?php comment_date(); ?> <?php comment_time(); ?>
|
<?php comment_author_link(); ?>
</p>
</div>
<?php
}
また、返信用の JavaScript(wp-includes/js/comment-reply.js)を読み込むように以下のコードを header.php の wp_head(); の直前に追加
(または functions.php に記述)
<?php if (is_singular()) wp_enqueue_script('comment-reply'); ?>
コメント投稿フォームを出力するには comment_form() を使う。
一般的なコメントフォームを出力するには、パラメータなしで実行するだけ。
<?php comment_form(); ?>
trackback_url() にはパラメータはない。
但し、投稿の編集画面で「このページでトラックバックとピンバックを許可する。」のチェックボックスをオフにしている場合は、トラックバック URL を出力しないように設定する必要があるので以下のようにする。
<?php if(pings_open()): ?> トラックバック URL: <?php trackback_url(); ?> <?php endif; ?>
コメントやトラックバックがある場合のみ出力するようにするため、if(have_comments()) を使う。
1ページあたりのコメント出力件数を設定すると、コメントが複数ページに分割されるのでその場合「previous_comments_link()」「next_comments_link()」で前後のコメントのページへのリンクを出力する。
comments.php の例
<div id="comments_area">
<?php if(have_comments()): ?>
<h3>Comments</h3>
<ul class="comments_list">
<?php wp_list_comments('callback=comlist'); ?>
</ul>
<?php if(get_comments_number()>5): ?>
<div id="comments_link">
<?php previous_comments_link('previous'); ?> <?php next_comments_link('next'); ?>
</div><!--/#comments_link -->
<?php endif; ?>
<?php endif; ?>
<?php comment_form(); ?>
<?php if(pings_open()): ?>
<p id="trback">
Track Back URL: <br>
<?php trackback_url(); ?>
</p>
<?php endif; ?>
</div><!--/#comments_area -->