WordPress.org

Make WordPress Core

Ticket #10615: 10615-4-no-output-buffering-updated.diff

File 10615-4-no-output-buffering-updated.diff, 3.1 KB (added by blepoxp, 8 years ago)

Refreshed. Doesn't use output buffering. Uses get_comments()

  • default-widgets.php

     
    618618        }
    619619
    620620        function flush_widget_cache() {
    621                 wp_cache_delete('recent_comments', 'widget');
     621                wp_cache_delete('widget_recent_comments', 'widget');
    622622        }
    623623
    624624        function widget( $args, $instance ) {
    625                 global $wpdb, $comments, $comment;
     625                global $comments, $comment;
     626               
     627                $cache = wp_cache_get('widget_recent_comments', 'widget');
    626628
    627                 extract($args, EXTR_SKIP);
    628                 $title = apply_filters('widget_title', empty($instance['title']) ? __('Recent Comments') : $instance['title'], $instance, $this->id_base);
    629                 if ( !$number = (int) $instance['number'] )
    630                         $number = 5;
    631                 else if ( $number < 1 )
    632                         $number = 1;
    633                 else if ( $number > 15 )
    634                         $number = 15;
    635 
    636                 if ( !$comments = wp_cache_get( 'recent_comments', 'widget' ) ) {
    637                         $comments = $wpdb->get_results("SELECT $wpdb->comments.* FROM $wpdb->comments JOIN $wpdb->posts ON $wpdb->posts.ID = $wpdb->comments.comment_post_ID WHERE comment_approved = '1' AND post_status = 'publish' ORDER BY comment_date_gmt DESC LIMIT 15");
    638                         wp_cache_add( 'recent_comments', $comments, 'widget' );
     629                        if ( ! is_array( $cache ) )
     630                        $cache = array();
     631               
     632                if ( isset( $cache[$args['widget_id']] ) ) {
     633                        echo 'cache '.$cache[$args['widget_id']];
     634                        return;
    639635                }
    640636
    641                 $comments = array_slice( (array) $comments, 0, $number );
    642 ?>
    643                 <?php echo $before_widget; ?>
    644                         <?php if ( $title ) echo $before_title . $title . $after_title; ?>
    645                         <ul id="recentcomments"><?php
    646                         if ( $comments ) : foreach ( (array) $comments as $comment) :
    647                         echo  '<li class="recentcomments">' . /* translators: comments widget: 1: comment author, 2: post link */ sprintf(_x('%1$s on %2$s', 'widgets'), get_comment_author_link(), '<a href="' . esc_url( get_comment_link($comment->comment_ID) ) . '">' . get_the_title($comment->comment_post_ID) . '</a>') . '</li>';
    648                         endforeach; endif;?></ul>
    649                 <?php echo $after_widget; ?>
    650 <?php
     637                extract($args, EXTR_SKIP);
     638                $output = '';
     639                $title = apply_filters('widget_title', empty($instance['title']) ? __('Recent Comments') : $instance['title']);
     640
     641                if ( ! $number = (int) $instance['number'] )
     642                        $number = 5;
     643                else if ( $number < 1 )
     644                        $number = 1;
     645
     646                $comments = get_comments(array('number' => $number));
     647                $output .= $before_widget;
     648                if ( $title )
     649                        $output .= $before_title . $title . $after_title;
     650
     651                $output .= '<ul id="recentcomments">';
     652                if ( $comments ) {
     653                        foreach ( (array) $comments as $comment) {
     654                                $output .=  '<li class="recentcomments">' . /* translators: comments widget: 1: comment author, 2: post link */ sprintf(_x('%1$s on %2$s', 'widgets'), get_comment_author_link(), '<a href="' . esc_url( get_comment_link($comment->comment_ID) ) . '">' . get_the_title($comment->comment_post_ID) . '</a>') . '</li>';
     655                        }
     656                }
     657                $output .= '</ul>';
     658                $output .= $after_widget;
     659
     660                echo $output;
     661                $cache[$args['widget_id']] = $output;
     662                wp_cache_set('widget_recent_comments', 'widget');
    651663        }
    652664
    653665        function update( $new_instance, $old_instance ) {