function pt_tag_cloud( $args = '' ) { $defaults = array( 'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45, 'format' => 'flat', 'separator' => "\n", 'orderby' => 'name', 'order' => 'ASC', 'exclude' => '', 'include' => '', 'link' => 'view', 'taxonomy' => 'post_tag', 'echo' => true, ); $args = wp_parse_args( $args, $defaults ); $post_type = $args['post_type']; global $wpdb; $tags = $wpdb->get_results( sprintf( "SELECT t.term_id, t.name, t.slug, t.term_group, t.term_order, t.menu_order, tt.term_taxonomy_id, tt.taxonomy, tt.description, tt.parent, COUNT(DISTINCT tr.object_id) AS count FROM {$wpdb->posts} p INNER JOIN {$wpdb->term_relationships} tr ON p.ID=tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id=tt.term_id WHERE p.post_type='%s' AND p.post_status = 'publish' AND tt.taxonomy='post_tag' GROUP BY tt.term_taxonomy_id ORDER BY count DESC", $post_type) ); if ( empty( $tags ) || is_wp_error( $tags ) ) return; foreach ( $tags as $key => $tag ) { if ( 'edit' == $args['link'] ) $link = get_edit_tag_link( $tag->term_id, $tag->taxonomy ); else $link = get_term_link( intval($tag->term_id), $tag->taxonomy ); if ( is_wp_error( $link ) ) { return false; } $tags[ $key ]->link = $link; $tags[ $key ]->id = $tag->term_id; } $return = wp_generate_tag_cloud( $tags, $args ); // Here's where those top tags get sorted according to $args $return = apply_filters( 'wp_tag_cloud', $return, $args ); if ( 'array' == $args['format'] || empty($args['echo']) ) return $return; echo $return; }