Category Tagging with Sort on PHP
タグクラウドを導入しました。ついでにプラグインを修正して前のエントリに書いたかっこ悪い状況も直しました。
Category Tagging
タグクラウド化は、Category Taggingというプラグインで実現しています。
WordPressでタグというと、Ultimate Tag Warriorというプラグインがメジャーなようですね。しかし設定項目が多すぎるのと、ちょっと使った感じだとタグを付け直さなきゃいけないっぽい(英語の説明を読み込んでないから未確認)ので、自分には手に余る感じでした。
一方、今回使用したCategory Taggingは、WordPressでのカテゴリをそのまま使ってタグクラウドを作ります。WordPressのカテゴリはエントリと多対多の関係でつけられるので、所謂タグとして使うならこれで十分じゃないかと。
サイドバーのテンプレートに
<li><h2>タグ</h2>
<ul>
<?php
if (function_exists ('cattag_tagcloud') ) {
echo '<div class="tagcloud">' . cattag_tagcloud(7,25,0,'NAME_ASC','','<span><a rel="tag" href="%link%" title="%description%" style="font-size:%size%pt">%title%</a></span>') . '</div>';
}
?>
</ul>
</li>
と書いて使っています。
DB内で文字が化けちゃってる場合にも、名前順に並べるHack
前のエントリにも書きましたが、ここのBlogではDB内の日本語が(DBから見たときに)化けた状態で格納されています。

WordPressのlist_catsやwp_list_catsといった関数はデータのソートをSQL分のOrder by句で行っているので、化けた内容に対してソートが行われて、結果の順番がおかしくなっちゃうんですね。
今回利用したCategory Taggingのcattag_tagcloudという関数は、第4引数が
- “NAME_ASC”、”NAME_DESC”の場合はWordPressの関数でソート
- “WEIGHT_ASC”、”WEIGHT_DESC”、”RANDOM”の場合は、PHPでソート
という実装になっています。なので、このままの状態で名前順に並べようとすると、また変な順番になっちゃう訳ですね。
そこで、第4引数が”NAME_ASC”、”NAME_DESC”の場合にもPHPでソートするように、プラグインを修正しました。
具体的には、プラグインソースのソートの部分の90行目付近を以下のように修正しました。
switch ($sort_by) {
+ case 'NAME_ASC';
+ $resultArray = cattag_aux_sortmddata($resultArray,'name','ASC','str');
+ break;
+ case 'NAME_DESC';
+ $resultArray = cattag_aux_sortmddata($resultArray,'name','DESC','str');
+ break;
case 'WEIGHT_ASC':
$resultArray = cattag_aux_sortmddata($resultArray,'count','ASC','num');
break;
case 'WEIGHT_DESC':
$resultArray = cattag_aux_sortmddata($resultArray,'count','DESC','num');
break;
case 'RANDOM':
shuffle($resultArray);
break;
}
文字化けの解消した状態でソートするので、意図したとおりの順番になってくれました。
ソースは、こちらにおいておきます。




2007年1月31日(水曜日) at 15時17分
一応、Ultimate Tag Warrior には、カテゴリをタグに変換する機能がついてます。でも、カテゴリとは別にタグが管理されるので、UTW でタグ付けした後は、正直カテゴリの扱いに困ります。あとは管理画面がえらく充実していて、テンプレートを弄らなくてもエントリに関連タグを表示できたりします。
カテゴリとタグを明確に使い分ける予定があるか、テンプレート弄りが面倒な人なら、Ultimate Tag Warrior がいいかもしんまい。
実際使ってみて、正直ちょっと多機能すぎて手に余るので、ハカーを目指すわれわれは、Category Tagging をベースに、テンプレートを弄るのがいいのではないかと。
2007年1月31日(水曜日) at 17時23分
この辺は怠惰かつ短気かつ傲慢にいきたいものですな