WordPress.org

Make WordPress Core

Changeset 11744


Ignore:
Timestamp:
07/26/09 01:23:46 (5 years ago)
Author:
azaozz
Message:

Fix wp_tag_cloud('order=RAND'), don't pre-sort if filter 'tag_cloud_sort' is used to sort the tags, props Joern_W, fixes #10393

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/category-template.php

    r11450 r11744  
    574574 * the 'format' argument will return in PHP array type format. 
    575575 * 
    576  * The 'tag_cloud_sort' filter allows you to override the sorting done 
    577  * by the 'orderby' argument; passed to the filter: $tags array and $args array. 
     576 * The 'tag_cloud_sort' filter allows you to override the sorting. 
     577 * Passed to the filter: $tags array and $args array, has to return the $tags array 
     578 * after sorting it. 
    578579 * 
    579580 * The 'orderby' argument will accept 'name' or 'count' and defaults to 'name'. 
     
    605606    if ( !isset( $args['topic_count_text_callback'] ) && isset( $args['single_text'] ) && isset( $args['multiple_text'] ) ) { 
    606607        $body = 'return sprintf ( 
    607             _n('.var_export($args['single_text'], true).', '.var_export($args['multiple_text'], true).', $count), 
     608            _n(' . var_export($args['single_text'], true) . ', ' . var_export($args['multiple_text'], true) . ', $count), 
    608609            number_format_i18n( $count ));'; 
    609610        $args['topic_count_text_callback'] = create_function('$count', $body); 
     
    611612 
    612613    $args = wp_parse_args( $args, $defaults ); 
    613  
    614614    extract( $args ); 
    615615 
     
    617617        return; 
    618618 
    619     // SQL cannot save you; this is a second (potentially different) sort on a subset of data. 
    620     if ( 'name' == $orderby ) 
    621         uasort( $tags, create_function('$a, $b', 'return strnatcasecmp($a->name, $b->name);') ); 
    622     else 
    623         uasort( $tags, create_function('$a, $b', 'return ($a->count > $b->count);') ); 
    624  
    625         $tags = apply_filters( 'tag_cloud_sort', $tags, $args ); 
    626  
    627     if ( 'DESC' == $order ) 
    628         $tags = array_reverse( $tags, true ); 
    629     elseif ( 'RAND' == $order ) { 
    630         $keys = (array) array_rand( $tags, count( $tags ) ); 
    631         $temp = array(); 
    632         foreach ( $keys as $key ) 
    633             $temp[$key] = $tags[$key]; 
    634  
    635         $tags = $temp; 
    636         $temp = null; 
    637         unset( $temp ); 
     619    $tags_sorted = apply_filters( 'tag_cloud_sort', $tags, $args ); 
     620    if ( $tags_sorted != $tags  ) { // the tags have been sorted by a plugin 
     621        $tags = $tags_sorted; 
     622        unset($tags_sorted); 
     623    } else { 
     624        if ( 'RAND' == $order ) { 
     625            shuffle($tags); 
     626        } else { 
     627            // SQL cannot save you; this is a second (potentially different) sort on a subset of data. 
     628            if ( 'name' == $orderby ) 
     629                uasort( $tags, create_function('$a, $b', 'return strnatcasecmp($a->name, $b->name);') ); 
     630            else 
     631                uasort( $tags, create_function('$a, $b', 'return ($a->count > $b->count);') ); 
     632 
     633            if ( 'DESC' == $order ) 
     634                $tags = array_reverse( $tags, true ); 
     635        } 
    638636    } 
    639637 
Note: See TracChangeset for help on using the changeset viewer.