wp_tag_cloudで本当にランダムなタグクラウドを表示する

wp_tag_cloudというテンプレートタグを使ってタグクラウドを「ランダム」に表示させていたのですが、どうも表示に偏りがあることに気づきました。
ここで言うランダムに表示というのはwp_tag_cloudのパラメータである “order” を “RAND” と記述し、表示することです。
しかし、これでは求めていた「全てのタグからランダムに指定数だけ取り出して出力する」という処理は行われないそうです。
というわけで、「本当にランダム」なタグクラウドを表示する方法を紹介いたします。

スポンサーリンク

wp_tag_cloudのパラメータの “order”での”RAND”は”orderby”で並び替えた全てのタグを”numer”で指定した数の上位を取り出してランダムに表示するような処理のようです。
ということは”orderby”というパラメータが”name”であれば、名前順に上から指定数だけ取り出した後にランダムに並び替えただけということになります。(”orderby”は記述しなければ名前順になります)
名前順の場合、タグを追加しない限りほぼ固定ですので、何回リロードしてみても同じようなタグが表示されるわけです。

こちらの要望は「取り出した後にランダムに並び替える」のではなくて「ランダムに並び替えた後に取り出す」ということをしてほしいので、ちょっと記述を追加します。
方法としては、タグ全部をランダムに並べたものを取得してから上から指定数だけ取り出すということになります。

$tags = wp_tag_cloud(array(
	'smallest'=>13,
	'largest'=>13,
	'unit'=>'px',
	'number'=>0,
	'order'=>'RAND',
	'echo'=>false
));
preg_match_all("/<a (.*?)<\/a>/u", $tags, $retArr);
$number = 15;
foreach($retArr[0] as $idx => $ret) {
  echo $ret."\n";
  if ($number - 1 == $idx) {
    break;
  }
}

上記コードの “number” という変数が表示するタグの数になります。
タグクラウドのデザインはいつも通り、wp_tag_cloudのパラメータで変えます。

これで「本当にランダム」なタグクラウドにすることができました。
なぜこの方法で実装してくれないのか不思議です・・・。

スポンサーリンク

Leave a Comment