WordPress 2.3 にアップグレードした。
wordpress のディレクトリごと上書きして [インストール先]/wp-admin/upgrade.php を実行してうまくいった気がする。

記事に対して「カテゴリ」を付ける機能は前からあったけど、今回アップグレードしたバージョンでは「タグ」も付けられるようになってる。
これってどのバージョンから入った機能なんだっけ?
ていうか、カテゴリとタグをどういうふうに使い分けるべきなのかよくわからない。
僕のなかではどっちも同じようなものなんだけど(wordpress に関して言えば)。

データベースの話

データベース上ではカテゴリの情報もタグの情報もそれぞれ同じテーブル(terms と term_taxonomy)に入ってる。
term_taxonomy というテーブルに実際のカテゴリとタグの情報が入っている。
taxonomy カラムに category という文字列がセットされていればそれはカテゴリで、post_tag という文字列がセットされていればタグ、ということのよう。

えーっと例えば、「ブログ」というカテゴリが存在し、同じ名前のタグもまた存在するとき、terms テーブルには「ブログ」という単語を表すレコートがひとつ存在し、term_taxonomy テーブルにはカテゴリとしての「ブログ」を表すレコード(category)とタグとしての「ブログ」を表すレコード(post_tag)がそれぞれ存在することになる。
うーん、説明がわかりにくいなぁ。

term_relationships というテーブルに、「どの記事にどの term_taxonomy が結びつくのか」という情報が入っている。
いわゆる関連テーブルってやつ。

それぞれのテーブルの関連は多分以下のような感じになってるんだと思う。

カテゴリをタグに変換

いろいろ考えた結果、カテゴリよりもタグをメインで使っていくことにした。
というか、もうカテゴリは必要なさげなので全部タグに変えてしまうことにした。
以下のような SQL でタグをカテゴリに変換した。

update term_taxonomy
    set taxonomy = 'post_tag'
    where taxonomy = 'category';

これでもうカテゴリとはおさらば(かなり強引なやり方な気がしなくもないけど)。

タグクラウド

「wp_tag_cloud」という関数でタグクラウドを簡単に出力できるみたい。
以下のコードをブログのサイドバー部分のテンプレートに埋め込んだ。

<?php wp_tag_cloud('format=list'); ?>

<<< 追記

上のコードだけど、ちょっと変えて今はこんな感じ。

<?php wp_tag_cloud('format=list&smallest=7&largest=24'); ?>

smallest がタグクラウドのフォントサイズの最小値で largest が最大値。

>>> 追記

「’format=list’」を引数に渡すことで、リスト形式(<li>)でタグクラウドを出力することができる(別にリスト形式にする必要もなかったんだけど)。

スタイルシートは以下のように記述。

ul.wp-tag-cloud {
    padding: 8px 0;
    margin: 0;
}

ul.wp-tag-cloud li {
    list-style: none;
    float: left;
    padding: 0;
    margin: 1px 3px;
}

ul.wp-tag-cloud li a {
    display: block;
    border: none;
    line-height: 100%;
}