Nire.Com

www.nire.com – 1994年からやってる個人サイト、にれ.コム。サーバ構築、携帯、カメラ、ゲーム、目の話、水泳とか。
2008 年 6 月 18 日

WordPress: コメントとトラックバックを分けるのにプラグインは不要

前記事: 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 のバックアップを取っておきます。

# cd /var/www/wp-content/themes/default
# cp -p comments.php comments.orig.php

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

comments.php を開き、次のような行を検索して見つけます。

<?php foreach ($comments as $comment) : ?>

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

<?php $comment_type = get_comment_type(); ?>
<?php if($comment_type == 'comment') { ?>

追加後の状態。

<?php foreach ($comments as $comment) : ?>
<?php $comment_type = get_comment_type(); ?>
<?php if($comment_type == 'comment') { ?>

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

<?php endforeach; /* end for each comment */ ?>

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

<?php } else { $trackback = true; } ?>

追加後の状態。

<?php } else { $trackback = true; } ?>
<?php endforeach; /* end for each comment */ ?>

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

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

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

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

<?php else : // displayed if there are no comments so far ?>

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

<?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 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 ?>

動作確認

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

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

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

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

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

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


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

続き: WordPress: 「最近のコメント」からトラックバックだけを消す (Brian’s Latest Comments) »

関連する投稿

「WordPress: コメントとトラックバックを分けるのにプラグインは不要」へのコメント/トラックバック (11)

  1. コメントだけまとめて表示する|トラックバック / ピンバックだけまとめて表示する


  2. ほうほうなるほど


  3. コメントとトラックバックをプラグインなど使わずに分ける方法


  4. トラックバックの表示


  5. コメント/トラックバックの分別をコードレベルで実装


トラックバック

  1. WordPressで遊ぼう » Blog Archive » コメントとトラックバックを分けるには
  2. デザインブログ | ketr.jp» Blog Archive » Wordpressでコメントとトラックバックを分けて表示
  3. チコット検証ブログ
  4. WordPressのトラックバック表示 « AfroNamiHeiの箱
  5. AfroNamiHeiの箱 : WordPressのトラックバック表示
  6. WordPressハッカーズ

コメントをどうぞ