web-dev-qa-db-fra.com

Classe css individuelle pour chaque balise dans wp_tag_cloud

Aide, c’est probablement le meilleur moyen de contrôler le style du wp_tag_cloud ...

Je cherchais un moyen d'ajouter des classes basées sur la taille à mes balises dans le widget Nuage de balises. Le problème ici est que cette solution ne fonctionne que si elle est codée en dur dans un fichier de modèle, mais pas pour le widget Nuage de tags.

J'ai également trouvé cet extrait d'ajouter classes de slug et ils fonctionnent parfaitement dès la sortie de la boîte. Je devais simplement les placer dans le fichier function.php.

J'essayais de faire en sorte que la solution un fonctionne de la même manière que la solution numéro deux, mais avec les noms de classe basés sur la taille au lieu des noms de slug, voire les deux. Cependant, je ne peux pas le comprendre et j'ai besoin d'aide. Merci d'avance.

3
Marc Wiest

essayez ce code:

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; 
}

il pourrait y avoir des solutions plus efficaces, ou un moyen de tout mettre dans une regex; cependant cela fonctionne (je ne suis pas un expert en preg_replace ()). peut être utilisé en même temps que le filtre slug class .

3
Michael

peut-être une approche meilleure/plus simple consiste à accrocher dans "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');

dans $ tag, vous avez [id], [url], [nom], [titre], [slug], [compte réel], [classe], [taille de police]

Donc, si vous voulez une classe personnalisée pour chaque tag, vous pouvez utiliser quelque chose comme:

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