前記事: WordPress: 「続きを読む」(more…) をクリックしたときのパーマリンクから “#more-” を除去する

WordPress では、コメントとトラックバック / ピンバックが同じものとして扱われており、そのままだと両方混在して、古い順に掲載されてしまいます。それをこの記事のように分けて表示する方法についてです。

動作確認した環境

WordPress 2.5.1 日本語版

comments.php の書き換えをどうするか?

私は最初コメントとトラックバックを分けるプラグインがあるのだと思っていたのですが、そうではないようです。1

簡単そうに思えるのは comments.php を、色々な WordPress サイトで紹介されているものに置き換えることですが、comments.php はテーマによってカスタマイズされていたりして、そのまま置き換えるとデザインが崩れたりするようです。

地味ですが安全確実なのは、自分が今使っているテーマファイル中の comments.php の必要な箇所だけを書き換えることです。できあがり品の comments.php のソースも眺めてみたのですが、一番ストレートなのはこちらのサイトにある手順でした。

Pro Blog Design – WordPress Separate Trackbacks and Comments

自分が使用しているテーマファイルのディレクトリに移動し、comments.php のバックアップを取っておきます。
[code language=”bash”]
# cd /var/www/wp-content/themes/default
# cp -p comments.php comments.orig.php
[/code]

コメントだけまとめて表示する

comments.php を開き、次のような行を検索して見つけます。
[code language=”php”]
<?php foreach ($comments as $comment) : ?>
[/code]

その直後に次の 2行を挿入します。

[code language=”php”]
<?php $comment_type = get_comment_type(); ?>
<?php if($comment_type == ‘comment’) { ?>
[/code]

追加後の状態。

[code language=”php”]
<?php foreach ($comments as $comment) : ?>
<?php $comment_type = get_comment_type(); ?>
<?php if($comment_type == ‘comment’) { ?>
[/code]

さらに、次のような行を検索して見つけます。

[code language=”php”]
<?php endforeach; /* end for each comment */ ?>
[/code]

その直前に、次の行を挿入します。

[code language=”php”]
<?php } else { $trackback = true; } ?>
[/code]

追加後の状態。

[code language=”php”]
<?php } else { $trackback = true; } ?>
<?php endforeach; /* end for each comment */ ?>
[/code]

ここまでで、トラックバック / ピンバックは除外され、コメントだけが表示されるようになります。

トラックバック / ピンバックだけまとめて表示する

除外されていたトラックバック / ピンバックを表示させるためには次のようにします。

次のような行を検索して見つけます。

[code lang=”php”]
<?php else : // displayed if there are no comments so far ?>
[/code]

その直前に、次の行を挿入します。「トラックバック」の文字列はお好みで。

[code gutter=”true” language=”php”]
<?php if ($trackback == true) { ?>
<h3>トラックバック</h3>
<ol>
<?php foreach ($comments as $comment) : ?>
<?php $comment_type = get_comment_type(); ?>
<?php if($comment_type != ‘comment’) { ?>
<li><?php comment_author_link() ?></li>
<?php } ?>
<?php endforeach; ?>
</ol>
<?php } ?>
[/code]

追加後の状態も念のため。

[code language=”php” gutter=”true” highlight=”12″]
<?php if ($trackback == true) { ?>
<h3>トラックバック</h3>
<ol>
<?php foreach ($comments as $comment) : ?>
<?php $comment_type = get_comment_type(); ?>
<?php if($comment_type != ‘comment’) { ?>
<li><?php comment_author_link() ?></li>
<?php } ?>
<?php endforeach; ?>
</ol>
<?php } ?>
<?php else : // displayed if there are no comments so far ?>
[/code]

動作確認

コメントとトラックバックが両方あるエントリにリンクしておきますので、参考にしてください。

前半がコメント、後半がトラックバックになりきれいに分かれているはずです。

コメント、トラックバックの数を分けて表示する方法もあるのですが、私はそこまで厳密な人ではないので 😕 冒頭で

「(記事名) … へのコメント / トラックバック (7)」

のように合算ということにしています。

ブラウザで動作確認しておかしかったら、comments.php の中身をよく見直してみてください。訳が分からなくなってしまったら、取っておいたバックアップの comments.orig.php を書き戻し、最初からトライです。


  1. コメント数とトラックバック / ピンバック数を分けてカウントするプラグインや、ウィジェットに新着コメントだけ表示させるためのプラグインはそれぞれ存在します。 []