WordPressのコメント機能を拡張する仕組みとして、Disqus Comment Systemというものがあります。
見た目がいい感じだったり、SNSアカウントでログインしてコメントできたりといろいろ高機能なので人気が高いようですね。
このブログにも設置してます。コメントは今のところ設置当初に自分で投稿したテスト用の書き込みでだけですがw
非常に便利なのですが、実は1つ問題が有り、Disqusを導入すると投稿に寄せられたトラックバックやピンバックを見ることができなくなってしまいます。
今回はそれを救出する方法についてのメモです。
消える理由を考える
WordPressは標準ではコメントもピンバックもトラックバックも全て投稿に対する「リアクション」としてまとめてコメント一覧に表示されます。(テンプレートを修正すると別々に表示することもできます)
それに対し、DisqusはDisqusのフォームから入力されたDisqusが管理する「コメント」のみを表示します。
ですので、Disqusのサーバーが管理していないWordPress側のリアクションは全て表示されなくなってしまうのですね。
救出する方法
コメントフォームの下に、新たにピンバック(トラックバック)のみを表示するコメント用のテンプレート関数を書くだけでOKです。
このときのポイントとしては、コメント関係だからといって
comments.php に書かず、テンプレート側に直接書く
ということです。
どうやら Disqus は、 comments.php のなかみをまるっと置き換えるようですので、恐らくここに書いてもおそらくDisqusに表示を奪われてしまいます。
では、実際にコードを書いていってみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<div id="commentform" class="cf"> <h3>Comment</h3> <?php comments_template(); ?> </div> <?php if(have_comments()): ?> <div id="pingbacks"> <h3>Pingback / Trackback</h3> <ul> <?php $args = array( 'style' => 'ul', 'type' => 'pings', ); wp_list_comments($args); ?> </ul> </div> <?php endif; ?> |
これは実際に今このブログで使ってるコードです ((厳密にはそのオリジナルです。現在は後述するシンプルな出力タグに切り替えています)) 。
前半部分(1-4行目)は通常のコメントフォーム出力タグですね。
その後に独自にピンバック表示用のコードを追記します。
ポイントは以下の2つです。
<?php if (have_comments()): ?><?php endif; ?>
これは投稿にコメントが有るかどうかを判定するIF文です。先程も書いたとおり、ピンバックやトラックバックもコメントとして扱いますので、ピンバック等があればコメントがなくてもここは true となり、中のコードが実行されます。
また、こうしておくことで、ピンバックが1件もない時はなにも表示しないようにしています。
<?php wp_list_comments($args); ?>
wp_list_comments()はコメントをリスト形式で出力するタグです。
$argsに設定を配列で指定するか、直接パラメータを&で繋いで書き込むことで出力方法や出力タイプを細かく指定できます。
type
type を指定することで、「コメント」「ピンバック」「トラックバック」のどれを表示するか(または全部表示するか)を決めることができます。
all | 全て |
comment | コメントのみ |
trackback | トラックバックのみ |
pingback | ピンバックのみ |
pings | ピンバックとトラックバック |
今回はコメントはDisqusにまかせてますので表示したいのは「トラックバック」と「ピンバック」の2つになりますので、 type は pings を指定します。
style
コメントをリストとして出力したい場合は、style を ul または ol にすると各コメントを <li> タグで括って出力してくます。
ただし、このタグは ul を指定しようが ol を指定しようが li しか出力しませんので、それを囲む ul (または ol )タグは自分で書く必要があります。逆に言えばここを書き換えるだけで自由に連番のリストにするか、通常のリストにするかを選べるとも言えます。
因みにリストにしたくない場合は、 style を div にすれば、divで囲って出力してくれます。
ul出力でいいならもっとシンプルに、
1 |
<?php wp_list_comments('type=pings'); ?> |
でもOKです。 ((デフォルト値が「ul」なので指定しない場合は ul を指定したのと同じように処理される為です))
これでピンバックとトラックバックだけ通常のコメントからは独立した形でリスト出力出来るようになりました。
ここまでくればあとはCSSで見た目を整えれば完成でですね。
コメントする