wp_tag_cloudで本当にランダムにタグを取り出す

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 . "&nbsp;";
    if(100 === $idx) {
      break;
    }
  }
echo '</div>'; ?>

結構、力技でしたね・・・。

コメントを残す

役立つ
面白い

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください