サポート » 使い方全般 » wp_tag_cloud利用時に吐き出されるソースにクラス名を付与したい

  • 解決済 silver_kir

    (@silver_kir)


    <?php wp_tag_cloud(); ?>を利用してタグ一覧を表示させてようとしていますが、その際に任意のスタイルで書き出すことは可能でしょうか?

    <?php wp_tag_cloud('smallest=10 & largest=10 & number=10 & orderby=count & order=DESC & format=list'); ?>

    現状は上記の記述でフォントサイズを固定にして投稿数順にリスト表示させています。
    吐き出されるソースは以下のようになります。

    <ul class='wp-tag-cloud'>
    	<li>..........</li>
    	<li>..........</li>
    	<li>..........</li>
    </ul>

    求める形は以下のようなソースです。

    <ul class='[任意のクラス名-A]'>
    	<li class='[任意のクラス名-B]'>..........</li>
    	<li class='[任意のクラス名-C]'>..........</li>
    	<li class='[任意のクラス名-B]'>..........</li>
    	(以下、表示数分はクラス名BとCがが交互に表示される)
    </ul>

    以上となります。
    functions.phpあたりにこれ用のスタイルを追加するのか、または全く別のタグで実装したほうがいいのか判りませんが宜しくお願い致します。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • format=array を指定すれば、PHP の配列で取得できます。

    ===============================================
    公式マニュアルより引用
    http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/wp_tag_cloud
    format
    (文字列) クラウド表示のフォーマット
    ‘flat’ (初期値) タグをホワイトスペースで区切る
    ‘list’ タグを class=’wp-tag-cloud’ 付きの ul(番号なし箇条書き)内に表示
    ‘array’ タグを配列に格納し、タグクラウドデータを PHP で扱えるように配列のまま返す。注: 配列の取得(表示ではなく)は WordPress 2.5 以上で使えます。

    ===============================================

    あとは、[任意のクラス名-B]等をPHPで生成すればよいでしょう。

    トピック投稿者 silver_kir

    (@silver_kir)

    PHPの配列で取得するということはfunctions.phpへの記述でしょうか。
    色々と調べながら下記のような内容で行なってみましたが、繰り返しの処理が行われないらしくリストタグのクラス名が一定のままでした。
    PHPに対して知識が足らずで申し訳ないです。

    ソース側記述

    <ul class="leftnavi_ranking">
    <?php ranking_tag_cloud(); ?>
    </ul>

    functions.php側への追記

    /**
    * タグクラウドの調整
    */
    function ranking_tag_cloud(){
      $tags = wp_tag_cloud(
        array(
          'format' => 'array',
          'smallest' => '10',
          'largest' => '10',
          'number' => '10',
          'order' => 'DESC',
          'orderby' => 'count'
        )
      );
    
      foreach($tags as $tag){
        preg_match('/href=\'http:\/\/.+?\'/', $tag, $matche);
        $href = $matche[0];
    
        preg_match('/style=\'.+?\'/', $tag, $matche);
        $score = round(floatval(preg_replace('/[^0-9\.]/', '', $matche[0])));
        $class_score = "tag-score-{$score}";
    
        preg_match('/title=\'.+?\'/', $tag, $matche);
        $title = $matche[0];
    
        $tag_name = strip_tags($tag);
    
        $post_count = 1;//カウンターの初期化
        $class = ($post_count % 2) ? 'bg_white' : 'bg_non';//カウントが2で割れればodd、割れなければeven
        echo "<li class=\"$class\">";//上記で得た値をクラスへ代入 
    
        echo "<a $href $title>$tag_name</a></li>";
    
        $post_count++; //カウンターを1増やす
      }
    }

    foreach の中で、
    $post_count = 1;//カウンターの初期化
    とやっているので、ループで毎回カウンターを初期化してしまっていますね。

    この部分を、foreach の外側にもっていってみてはどうでしょうか。

    トピック投稿者 silver_kir

    (@silver_kir)

    foreachからループが始まっているのを失念していました。
    ループ内でいくらカウントを加算しようとしてもそれは無理ですよね・・・ 簡単なミスでお恥ずかしい。

    ご指摘通りの手順で無事目的の仕様が実現できました。
    ありがとうございました!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「wp_tag_cloud利用時に吐き出されるソースにクラス名を付与したい」には新たに返信することはできません。