WordPressでタグクラウドを表示するにはwp_tag_cloudを使います。
wp_tag_cloud関数のタグ表示順は下記のようになっているようです。
1. デフォルトでは、タグ名順(’oderby’=>’name’)となる。
(’oderby’=>’count’)にするとタグ数順となる。
2. 上記の順番で指定した件数(’number’ => 50)の上位を取りだす。
(’number’ => 0)にすると全部取り出す。
3. 取り出した件数にて、表示順(’order’ => ‘RAND’)を変える。
(’order’ => ‘ASC’)にすると昇順になる。
※上記のような仕様なので、例えば1000タグがあったとして、そのうち50タグをランダム表示しようとした場合、結局1.2.のタグ名順かタグ数順の上位50タグを取り出すことになり、取り出した後にランダム表示するだけになります。つまり、1000タグのなかのいつも同じタグ50個が表示されてしまいます。
※1000タグの中から50タグをその都度、本当にランダムに取り出したい場合は工夫が必要です。もちろん1000タグ(全部)取り出せば、純粋にランダムに表示することができますが。
以上のことから、取り敢えず全部取り出してランダム表示にして、preg_match_allで文字列を配列にし、必要な件数をforeachで1件ずつ表示することにしました。
<?php
$tagcloud = array(
'smallest' => 12,
'largest' => 12,
'unit' => 'px',
'number' => 0,
'format' => 'flat',
//'orderby' => 'name',
'order' => 'RAND',
'exclude' => '',
'include' => '',
'link' => 'view',
'taxonomy' => 'members_tag',
'echo' => false
);
echo '<div class="tag-cloud">';
$tags = wp_tag_cloud($tagcloud);
preg_match_all("/<a (.*?)<\/a>/is", $tags, $retArr);
foreach($retArr[0] as $idx => $ret) {
echo $ret . " ";
if(100 === $idx) {
break;
}
}
echo '</div>'; ?>
$tagcloud = array(
'smallest' => 12,
'largest' => 12,
'unit' => 'px',
'number' => 0,
'format' => 'flat',
//'orderby' => 'name',
'order' => 'RAND',
'exclude' => '',
'include' => '',
'link' => 'view',
'taxonomy' => 'members_tag',
'echo' => false
);
echo '<div class="tag-cloud">';
$tags = wp_tag_cloud($tagcloud);
preg_match_all("/<a (.*?)<\/a>/is", $tags, $retArr);
foreach($retArr[0] as $idx => $ret) {
echo $ret . " ";
if(100 === $idx) {
break;
}
}
echo '</div>'; ?>
結構、力技でしたね・・・。