[WPCH vol.01] ウィジェットをハック。タグクラウドのソート順を変更する
WordPress は様々な動作を、テーマやウィジェットなどに記述することで拡張することができます。ただ、ほんのちょっとのことだったり、こうだと便利なのに!と思う部分を、全部テーマやウィジェットで書き直すのはまず面倒ですし、最終的に全体のパフォーマンスに影響を与えます。
というわけで、新しいウィジェットを書いたり、テーマファイルに特別な記述をしたりするよりも、ほんのちょっとだけコアのプログラムに手を入れて、ほんのちょっとだけ楽したり、自己満足したりするカテゴリーを立ててみました。
第一弾として、多くの人がブログとして使う際に利用しているであろう、タグクラウドの並び順を変更してみます。
ファイルは、wp-dir/wp-includes/widgets.php です。
// 1340行目付近
function wp_widget_tag_cloud($args) {
extract($args);
$options = get_option('widget_tag_cloud');
$title = empty($options['title']) ? __('Tags') : $options['title'];
echo $before_widget;
echo $before_title . $title . $after_title;
// wp_tag_cloud 並び順変更(デフォルトは名前の昇順。カウントの降順にする)
// wp_tag_cloud(); // この行をコメントし、下のようにする
wp_tag_cloud(array('orderby' => 'count', 'order' => 'DESC'));
echo $after_widget;
}
上記のように、wp_tag_cloud();を、wp_tag_cloud(array('orderby' => 'count', 'order' => 'DESC'));にすることで、使用頻度(count)の高い順(DESC)に出力させることができます。
function wp_tag_cloud()は、wp-dir/wp-includes/category-template.phpにあって、以下のように書かれています。
// category-template.php function wp_tag_cloud() 内
$defaults = array(
'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC',
'exclude' => '', 'include' => ''
);
というわけなので、これは次のように設定できることがわかります。
// 先の wp_tag_cloud()の呼び出し箇所
wp_tag_cloud(array(
'smallest' => 8, // styleで定義されるフォントサイズ(小さい)
'largest' => 22, // 同上(最も大きい)
'unit' => 'pt', // フォントサイズのユニット(ex:pt,em,px)
'number' => 45, // リミッター(SQL の LIMIT 句に使われるので、多くのタグを使う場合増やすこと。)
'format' => 'flat', // 出力形式。list(デフォルト) と flat(内部的なデフォルト)が使える。array は未調査。
'orderby' => 'name', // ソートキー。name と count(内部的なデフォルト) が使える
'order' => 'ASC', // ソート順。DESC(降順) と RAND(ランダム) が使える。ASC(昇順)はデフォルト。
'exclude' => '', // 含まないタグID(未検証)
'include' => '' // 含みたいタグID(未検証)
);
や、ぶっちゃけ、FC2ブログが同じようにできるらしくて、WPでもできない?って聞かれただけなんですけどね。
注:この情報は、WordPress 2.5 をベースに書かれています。また、WP自体をバージョンアップする場合に、ヘタに上書きしたり、逆に反映し忘れたりしないように、サブバージョン等でのファイル管理をお勧めします。


Leave a Reply