web-dev-qa-db-fra.com

Comment ajouter une classe au lien du widget Tag Cloud?

J'essaie actuellement d'ajouter des styles aux liens dans le widget Tag Cloud que je peux voir utiliser wp_tag_cloud() pour générer le nuage lui-même. Les arguments dans wp_tag_cloud () n'incluent pas un nom de classe, ce que je veux, car le style de l'attribut title n'est pas très efficace et ne permet pas une croissance importante. Par exemple:

.widget .tagcloud a[title~="1"]{
    color: red;
  }
  .widget .tagcloud a[title~="2"]{
    color: yellow;
  }
  .widget .tagcloud a[title~="9999"]{
    color: purple;
  }

J'ai trouvé le filtre wp_generate_tag_cloud_data qui semble être ce que je veux mais il me manque quelque chose car il n'a aucun effet. Voici ce que j'ai jusqu'à présent:

add_filter( 'wp_generate_tag_cloud_data', 'my_tag_cloud_data', 10, 1 );

function my_tag_cloud_data($tags_data){

foreach ( $tags as $key => $tag ) {
    $tag_id = isset( $tag->id ) ? $tag->id : $key;
    $tag_class= 'tag-link-' . $tag_id;

    $count = $counts[ $key ];
    $real_count = $real_counts[ $key ];

    if ($real_count > 20){
        $tag_class= 'tag-link-' . $tag_id . ' x-large';
    } elseif ($real_count > 15){
        $tag_class= 'tag-link-' . $tag_id . ' large';
    } elseif ($real_count > 7){
        $tag_class= 'tag-link-' . $tag_id . ' medium';
    } elseif ($real_count > 1){
        $tag_class= 'tag-link-' . $tag_id . ' small';
    } else {
        $tag_class= 'tag-link-' . $tag_id . 'x-small ';
    }

    if ( $translate_nooped_plural ) {
        $title = sprintf( translate_nooped_plural( $translate_nooped_plural, $real_count ), number_format_i18n( $real_count ) );
    } else {
        $title = call_user_func( $args['topic_count_text_callback'], $real_count, $tag, $args );
    }

    $tags_data[] = array(
        'id'         => $tag_id,
        'url'        => '#' != $tag->link ? $tag->link : '#',
        'name'       => $tag->name,
        'title'      => $title,
        'slug'       => $tag->slug,
        'real_count' => $real_count,
        'class'      => $tag_class,
        'font_size'  => $args['smallest'] + ( $count - $min_count ) * $font_step,
    );
}

return $tags_data;

}

J'ai essayé de jouer avec la priorité et de l'envelopper dans une fonction liée au crochet init mais en vain. Je serais très reconnaissant si quelqu'un pouvait me dire ce que je fais mal ici.

2
mantis

Vous voulez seulement ajouter un nom de classe basé sur les comptes. Votre code ci-dessus semble avoir été copié/collé quelque part, mais vous n'avez pas besoin de tout cela.

Je viens de tester cela avec wp_generate_tag_cloud_data(# L869) et wp_tag_cloud() et ça marche.

Malheureusement pour un site de test de base comme le mien, la petite count représente le plus grand nombre de balises pour moi. Vous voudrez peut-être ajouter vos tailles en fonction d'un font_size normalisé. Faites essentiellement des calculs pour le transformer en 0-1 et sélectionnez vos classes avec cette valeur - pas count .

add_filter( 'wp_generate_tag_cloud_data', 'my_tag_cloud_data', 10, 1 );

function my_tag_cloud_data( $tags_data ) {

    foreach ( $tags_data as $key => $tag ) {

        // get tag count
        $count = $tag [ 'real_count' ];

        // adjust the class based on the size
        if ( $count > 20 ) {
            $tags_data [ $key ] [ 'class' ] .= ' tag x-large';
        } elseif ( $count > 15 ) {
            $tags_data [ $key ] [ 'class' ] .= ' tag large';
        } elseif ( $count > 7 ) {
            $tags_data [ $key ] [ 'class' ] .= ' tag medium';
        } elseif ( $count > 1 ) {
            $tags_data [ $key ] [ 'class' ] .= ' tag small';
        } else {
            $tags_data [ $key ] [ 'class' ] .= ' tag x-small ';
        }
    }

    // return adjusted data
    return $tags_data;
}

CSS

<style>
    .tag.x-large {
        color: red;
    }
    .tag.large {
        color: green;
    }
    .tag.medium {
        color: blue;
    }
    .tag.small {
        color: yellow;
    }
    .tag.x-small {
        color: orange;
    }
</style>
0
jgraup