ここ最近になって、Nire.Com にコメントをいただく方に Gravatar 持ちが増えてきたので、テーマを対応させてみました。最初 Gravatars2 プラグインでやろうとしたのですが、問題があり今回はボツ。PHP コードをさくりと挿入して解決。

Gravatar.com

Gravatar.com

大体 Gravatar ってなんですか

Gravatar ((Globally Recognized Avatar)) というのはパルコの大売出しのことではなく、ブログでコメントをつけたときに表示される自分専用のアイコンです。日本人的には「グラバター」とでも読んでおけば良いでしょう。

私はどうも「アバター」と言われると Ultima IV とか、MMORPG の中で動く 3D キャラとか、そっちを想像するのですがここで指しているのは単純に 40×40 ピクセルのビットマップです。

といってもけっこう馬鹿にできなくて、アイコンがあるかないかでずいぶんブログの印象は変わります。

左が使用前。右が使用後。わりと真面目なことを議論しているコメントも、いきなりフレンドリーです。

Gravatar なしのコメント Gravatar 表示状態

このアイコン、いちいちコメントするブログにビットマップをアップロードしているわけではなく、Gravatar.com に登録したイメージを、コメント記入時のメールアドレスをキーに Gravatar サーバから引っ張ってきて、表示するメカニズムの様子。

表示させるためにはテーマファイルの編集が必要

Gravatar を表示させるために、テーマファイルにコードを書く必要があります。
function.php に下記のような関数を丸ごと追加しておき、

[code toolbox=”true” language=”php”]
function echo_avatar($email) {
if (function_exists(‘get_avatar’)) {
echo get_avatar($email);
} else {
//alternate gravatar code for < 2.5
$grav_url = "http://www.gravatar.com/avatar.php?gravatar_id=
" . md5($email) . "&default=" . urlencode($default) . "&size=" . $
size;
echo "<img src=’$grav_url’/>";
}
}
[/code]

comments.php で「コメントループ」の中でこの関数を呼ぶ必要があります。このような構造をしているはず。

[code language=”php”]
<?php if($comments):foreach($comments as $comment): ?>
(ループ内)
<?php endforeach;endif; ?>
[/code]

Nire.com のように「○○さんは言いました」の左肩に表示するのであれば、下記の位置に色の変わっている 2行を挿入します。((分かりやすくするため、多言語対応のための _e() などは使っていません))

[code language=”php” gutter=”true” highlight=”6,7″]
<ol class="commentlist">
<?php foreach ($comments as $comment) : ?>
<?php $comment_type = get_comment_type(); ?>
<?php if($comment_type == ‘comment’) { ?>
<li <?php echo $oddcomment; ?>id="comment-<?php comment_ID() ?>">
<?php if (function_exists(‘echo_avatar’))
{ echo_avatar($comment); } ?>
<div class="bobcomment"><?php comment_author_link() ?> は言いまし
た:
[/code]

以上終わり。

functions.php に関数として別定義しなくても、いきなり comments.php の中に直接すべて書いてしまっても動きますが、この辺は好みの問題で。

Gravatars2 プラグインは不具合が

実は、いきなり PHP コードを書き加える前に Gravatars2 というプラグインを無難に使ってみていました。一度呼び出した Gravatar イメージをキャッシュしてくれるのが、このプラグインの大きな特徴です。また Gravatar 持ちでない人のメールアドレスに対しては、「?」アイコンではなく、ランダムに何か表示させる機能も持っています。

しかし HTML ページキャッシュの件でも書いたように、キャッシュというのは expire してしまうまで、古いコンテンツ (この場合は更新される前の古い Gravatar イメージ) を表示し続けるものですから、必要性とシステム負荷のトレードオフで採用するかしないかを選ぶべきです。

そんなに Gravatar サーバが不安定なわけでも、一日に 100個のコメントが書かれるわけでもないので、ここにキャッシュは要らないだろうと。

また、設定画面で Gravatar の表示サイズを変更したのに、実際の表示が変更されていなかったり、キャッシュをクリアすれば何も表示されなくなったりと、Gravatars2 を使うメリットが見いだせず、ボツにしました。

Gravatar に関してはさっさとコード書き加えた方が早そうです。