Make WordPress Core

Ticket #4552: 4552.smartclip.diff

File 4552.smartclip.diff, 1.7 KB (added by DD32, 17 years ago)

Clips lower items first(limitmode=smart), moves links into wp_tag_cloud()

  • wp-includes/category-template.php

     
    299299        if ( empty($tags) )
    300300                return;
    301301
     302        for($i=0; $i < count($tags); $i++)
     303                $tags[$i]->link = get_tag_link( $tags[$i]->term_id );
     304
    302305        $return = wp_generate_tag_cloud( $tags, $args ); // Here's where those top tags get sorted according to $args
    303306        echo apply_filters( 'wp_tag_cloud', $return, $args );
    304307}
     
    309312function wp_generate_tag_cloud( $tags, $args = '' ) {
    310313        global $wp_rewrite;
    311314        $defaults = array(
    312                 'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
    313                 'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC'
     315                'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 0,
     316                'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC', 'limitmode' => 'smart'
    314317        );
    315318        $args = wp_parse_args( $args, $defaults );
    316319        extract($args);
     
    319322                return;
    320323        $counts = $tag_links = array();
    321324        foreach ( (array) $tags as $tag ) {
     325                if( !is_object($tag) )
     326                        $tag = (object)$tag; //If array of non-object was given, convert it to an object
    322327                $counts[$tag->name] = $tag->count;
    323                 $tag_links[$tag->name] = get_tag_link( $tag->term_id );
     328                $tag_links[$tag->name] = $tag->link;
    324329        }
    325330
     331        //Limit it.
     332        if( $number > 0 && $number < count($counts) ){
     333                //Sort it
     334                if( 'smart' == $limitmode )
     335                        arsort($counts);
     336                else
     337                        uksort($counts, 'strnatcasecmp');
     338
     339                $numberRemove = count($counts) - $number;
     340                for($i=0; $i<$numberRemove; $i++)
     341                        array_pop($counts);
     342        }
     343
    326344        $min_count = min($counts);
    327345        $spread = max($counts) - $min_count;
    328346        if ( $spread <= 0 )