トラックバックは全てのブログの共通仕様、と思っていたのだけれど、どうもmsnは違うらしい。msnからこのブログにトラックバックを送ると、ブログ名やタイトルが表示されず、トラックバック記事のURLが表示されてしまう。
そこで、phpスクリプトを利用して、ほかのブログからのトラックバックと同じように表示されるようにしてみた。
phpを使うので、まずは各アーカイブがphp化されていることが前提。
個別エントリーアーカイブの場合、デフォルトテンプレートのトラックバック表示部分は次のようになっている。
<MTPings>
<p id=”p<$MTPingID$>”>
» <a href=”<$MTPingURL$>”><$MTPingTitle$></a> from
<$MTPingBlogName$><br />
<$MTPingExcerpt$> <a href=”<$MTPingURL$>”>[続きを読む]</a>
</p>
<p class=”posted”>トラックバック時刻: <$MTPingDate$></p>
</MTPings>
この赤字部分を、以下の青字部分のように書き換える。
<MTPings>
<p id=”p<$MTPingID$>”>
& raquo; <a href=”<$MTPingURL$>”>
<?
$title = “<$MTPingTitle$>”;
if(preg_match(“/^http:\/\/spaces\.msn\.com/”, $title)){
$string = “<$MTPingURL$>”;
$list = explode (“/”, $string);
print “<$MTPingExcerpt$></a> from $list[4]”;
}
else { print “<$MTPingTitle$></a> from “; }
?>
<$MTPingBlogName$><br />
<$MTPingExcerpt$> <a href=”<$MTPingURL$>”>[続きを読む]</a>
</p>
<p class=”posted”>トラックバック時刻: <$MTPingDate$></p>
</MTPings>
php関数のpreg_match関数で、「$MTPingTitle$」に「http://spaces.msn.com」が含まれるかどうか調べ、含まれていればmsnからのトラックバックと判定する。
msnからのトラックバックの場合は、「$MTPingTitle$」の代わりに「$MTPingExcerpt$」、「$MTPingBlogName$」の代わりにmsnブログのメンバーidを表示する。msnブログのメンバーidは、explode関数でトラックバック記事のURL$MTPingURL$を「/」で分割し、その5番目の要素を取り出すことで表示できる。