WP2.9とタグクラウド

WordPressの新バージョンがリリースされたので、いつものようにポチッと自動アップグレード。今のところ何の問題もなく動いているようです。アップグレードの前には念のためデータベースとファイルのバックアップをとっておきましょう。

(2009-12-24追記) wp-cronが働かなくなるバグがあるようです。このため、予約投稿やping送信、サイトマップの作成が行われないことがあります。wp-includes/http.phpをtrunkに入れ替えることで修正できます。

WP2.9からの新機能としてはゴミ箱だったりメディア周りだったりするわけですが、私には特に関係ないかなぁという感じです。(新機能について詳しくは公式サイトの記事:WordPress | 日本語 » WordPress 2.9をご覧ください。)

アップグレード後に自分のサイトにアクセスしてみて気付いたのですが、タグクラウド周りにも変更が加えられているようです。詳しい説明があまりないみたいなので、私が気付いたところを簡単にまとめてみようと思います。

タグクラウドでは、各タグのフォントサイズが使用頻度に応じて指定されています。これまではこのフォントサイズの計算はタグのカウントに線形比例する形で行われていました。コアファイル(wp-includes/category-template.php)でフォントサイズの計算式は、

$smallest + ( ( $count - $min_count ) * $font_step )

となっています。ここで、$countはこのタグの出現回数、$smallestは最小フォントサイズ、$min_countは全タグ中の最小出現回数で、$font_step

$font_step = ( $largest - $smallest ) / ( $max_count - $min_count );

	$smallest$min_countは前出、
	$largestは最大フォントサイズ、$max_countは全タグ中の最大出現回数
	変数・計算式は分かりやすくなるよう少し変更しています

で計算されます。

この計算方法は直観的で非常に簡単で分かりやすいのですが、問題もあります。1つまたは少数のタグの出現回数が突出して多い場合、それらが非常に大きなフォントで表示され、それ以外のタグは非常に小さくなってしまいます。私のブログの場合、アップグレード直前の状態では"KissX2"タグの使用回数が飛びぬけているため、このタグのみが最大サイズになり、その他のタグは使用回数に関わらずほぼ最小サイズ付近になってしまっていました。このような状態になってしまっているブログは多いと思われます。

WP2.9でも実はこの部分のコードは変わっていません。ただし、$countが以下のように変換されているのです。

foreach ( (array) $tags as $key => $tag ) {
	$real_counts[ $key ] = $tag->count;
	$counts[ $key ] = $topic_count_scale_callback($tag->count);
}

$countはコールバック関数により変換され、これまでの$count$real_countに格納されています。この$topic_count_scale_callbackはユーザーが任意の関数を指定できる引数ですが、デフォルトでは以下の関数になっています。

function default_topic_count_scale( $count ) {
	return round(log10($count + 1) * 100);
}

つまり対数関数で変換されており、少ない出現回数の部分を持ち上げる格好になっています。これにより、今までは小さいフォントサイズに埋もれていたタグが適切に(少なくとも私のブログでは)重みづけされて、より見やすいタグクラウドになりました。さらに、この変換が気に入らない場合は自分の好きな関数を使って重みづけの計算を変更することもできます。もし以前のままの計算方法が良ければ、テーマ中のwp_tag_cloud関数を呼び出す部分を以下のようにすればよいわけです(他の引数は省略しています)。

<?php
function my_topic_count_scale ( $count ) {
	return $count;
}
wp_tag_cloud('topic_count_scale_callback=my_topic_count_scale');
?>

以上、WP2.9におけるタグクラウドに関する変更点を調べてみましたが、他にもいろいろと細かな変更が加えられているみたいですので、気が向いたら(必要になったら)また調べてみようと思います。