2009/01/26 (Mon)
WP 2.7 のコメント返信機能を導入してみた。
Photo-Biyoriのアップデートに向けてのテストがてら、このサイトのコメント表示を2.7から導入された返信できる入れ子(って言うんでしょうか?)/スレッド表示にしてみました。
いろいろ探してみたのですが、詳しいドキュメンテーションが見当たらず、以下を参考に無理矢理挑戦。
WordPress Codex: Template Tags/wp list comments
WordPress Codex: Migrating Plugins and Themes to 2.7/Enhanced Comment Display
結構めんどくさかったので、「別に今のままでもいいや」っていう方は、使っているテーマの作者が2.7対応にアップデートしてくれるのを待ったほうがいいかも。参考になるかどうかわかりませんが、以下私がこのサイトに導入した方法です。
まず、使用しているテーマのheader.phpファイルのwp_head()の直前に
<?php if ( is_singular() ) wp_enqueue_script( 'comment-reply' ); ?>
というラインを追加。
管理画面の設定 > ディスカッションから
Enable threaded (nested) comments x levels deep
というのをチェック。
次に。テーマ内のcomments.phpというファイルが今回のアップデートで大幅に変更されているようで、あれこれいじってもちゃんと動作しなかったので、自分のテーマのcomments.phpをいったんバックアップして、2.7に同梱されているデフォルトテーマのcomments.phpを自分のテーマ内にコピー。この時点でスタイルが設定されていないのでレイアウトが一時ぐちゃぐちゃになります。
この状態で、返信リンクでコメント欄がインラインで開くか、テストコメントが入れ子で表示されるかをテスト。大丈夫そうだったら、デフォルトテーマのstyle.cssを参考にしながら、コメント関係のスタイルを設定。
ただし、このままだと、コメント表示のフォーマットは変更する事ができません。デフォルトだと
xxx says:
日付/曜日/(編集リンク)
コメント
(返信リンク)
という並び。
これを変更するには、
<?php wp_list_comments(); ?>
というラインを
<?php wp_list_comments('callback=mytheme_comment'); ?>
というふうに変更し、自分のテーマフォルダ内のfunctions.phpファイルにmytheme_commentという関数を作成することになります。 (’mytheme_comment’は適宜変更。)
この関数の設定もいまひとつよくわからなかったので、このページにあるサンプルをがっつりコピーして、まずテスト。
function mytheme_comment($comment, $args, $depth) {
$GLOBALS['comment'] = $comment; ?>
<li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>">
<div id="comment-<?php comment_ID(); ?>">
<div class="comment-author vcard">
<?php echo get_avatar($comment,$size='48',$default ); ?>
<?php printf(__('<cite class="fn">%s</cite> <span class="says">says:</span>'), get_comment_author_link()) ?>
</div>
<?php if ($comment->comment_approved == '0') : ?>
<em><?php _e('Your comment is awaiting moderation.') ?></em>
<br />
<?php endif; ?>
<div class="comment-meta commentmetadata"><a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>"><?php printf(__('%1$s at %2$s'), get_comment_date(), get_comment_time()) ?></a><?php edit_comment_link(__('(Edit)'),' ','') ?></div>
<?php comment_text() ?>
<div class="reply">
<?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?>
</div>
</div>
<?php
}
この状態だとデフォルトのテーマと同じように表示されるようなので、ここからすこしづつ、自分の表示したい順番、スタイルに変更していきました。←かなりのチカラ技です…
あと、以下のようにtypeを使えば、コメントとピンバックの表示方法を別に設定する事も可能だそうです。
<?php wp_list_comments('type=comment&callback=mytheme_comment'); ?>
<?php wp_list_comments('type=pingback&callback=mytheme_pingback'); ?>










[...] WP 2.7 のコメント返信機能を導入してみた。 [...]