WordPress.org

Make WordPress Core

Ticket #10615: widget_comments_use_api.10615.persistent_cache.diff

File widget_comments_use_api.10615.persistent_cache.diff, 2.7 KB (added by filosofo, 6 years ago)
  • wp-includes/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; 
    626626 
     627                $cache = wp_cache_get('widget_recent_comments', 'widget'); 
     628 
     629                if ( ! is_array( $cache ) ) 
     630                        $cache = array(); 
     631                 
     632                if ( isset( $cache[$args['widget_id']] ) ) { 
     633                        echo $cache[$args['widget_id']]; 
     634                        return; 
     635                } 
     636 
     637                ob_start(); 
    627638                extract($args, EXTR_SKIP); 
    628639                $title = apply_filters('widget_title', empty($instance['title']) ? __('Recent Comments') : $instance['title']); 
    629                 if ( !$number = (int) $instance['number'] ) 
     640                if ( ! $number = (int) $instance['number'] ) 
    630641                        $number = 5; 
    631642                else if ( $number < 1 ) 
    632643                        $number = 1; 
    633                 else if ( $number > 15 ) 
    634                         $number = 15; 
    635644 
    636                 if ( !$comments = wp_cache_get( 'recent_comments', 'widget' ) ) { 
    637                         $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_approved = '1' ORDER BY comment_date_gmt DESC LIMIT 15"); 
    638                         wp_cache_add( 'recent_comments', $comments, 'widget' ); 
     645                $comments = get_comments(array('number' => $number)); 
     646 
     647                echo $before_widget; 
     648                if ( $title )  
     649                        echo $before_title . $title . $after_title; 
     650 
     651                echo '<ul id="recentcomments">'; 
     652                if ( $comments ) {  
     653                        foreach ( (array) $comments as $comment) { 
     654                                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>'; 
     655                        } 
    639656                } 
     657                echo '</ul>'; 
     658                echo $after_widget; 
    640659 
    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 
     660                $cache[$args['widget_id']] = ob_get_flush(); 
     661                wp_cache_add('widget_recent_comments', 'widget'); 
    651662        } 
    652663 
    653664        function update( $new_instance, $old_instance ) {