web-dev-qa-db-ja.com

Wp_tag_cloudの各タグに対する個別のCSSクラス

手助け、これはおそらくwp_tag_cloudのスタイルを制御するための最良の方法です...

私はタグクラウドウィジェット内の私のタグに サイズベースのクラス を追加する方法を探していました。ここでの問題は、この解決法が、例えばテンプレートファイルにハードコードされている場合にのみ機能し、タグクラウドウィジェットには機能しないことです。

私はまた スラッグクラス を追加するこのスニペットを見つけました、そして、彼らは美しく箱から出してすぐに働きます。私は単にそれらをfunction.phpファイルの中に置かなければならなかった。

私は、解決策1を解決策2と同じ方法で機能させようとしていましたが、スラッグ名の代わりにクラス名、あるいはその両方を使用しました。しかし、私はそれを理解することができず、助けが必要です。前もって感謝します。

3
Marc Wiest

このコードを試してください:

add_filter ( 'wp_tag_cloud', 'tag_cloud_font_size_class' );  
function tag_cloud_font_size_class( $taglinks ) { 
    $tags = explode('</a>', $taglinks);
    $regex1 = "#(.*style='font-size:)(.*)((pt|px|em|pc|%);'.*)#e"; 
    $regex2 = "#(style='font-size:)(.*)((pt|px|em|pc|%);')#e";         
    $regex3 = "#(.*class=')(.*)(' title.*)#e";         
    foreach( $tags as $tag ) {         
        $size = preg_replace($regex1, "(''.round($2).'')", $tag ); //get the rounded font size       
        $tag = preg_replace($regex2, "('')", $tag ); //remove the inline font-size style
        $tag = preg_replace($regex3, "('$1tag-size-'.($size).' $2$3')", $tag ); //add .tag-size-{nr} class
        $tagn[] = $tag;
    }     
    $taglinks = implode('</a>', $tagn);     
return $taglinks; 
}

もっと効果的な解決策、あるいはすべてを1つの正規表現にまとめる方法があるかもしれません。しかしうまくいきます(私はpreg_replace()のエキスパートではありません)。 スラッグクラス フィルタと同時に使用できます。

3
Michael

もっと良い/もっと単純なアプローチが "wp_generate_tag_cloud_data"にフックしているかもしれません;)

function tribalpixel_tag_cloud_class($tags_data) {

    foreach ($tags_data as $key => $tag) {
        $tags_data[$key]['class'] =  $tags_data[$key]['class'] ." myCustomClass";
    }
    return $tags_data;
}

add_filter('wp_generate_tag_cloud_data', ' tribalpixel_tag_cloud_class');

$ tagには[id]、[url]、[name]、[title]、[slug]、[real_count]、[class]、[font_size]があります。

そのため、すべてのタグにカスタムクラスが必要な場合は、次のように使用できます。

$tags_data[$key]['class'] = "tag-link-".$tag['slug'];
0
Tribalpixel