Make WordPress Core

Ticket #36904: 36904.2.patch

File 36904.2.patch, 8.5 KB (added by spacedmonkey, 8 years ago)
  • src/wp-includes/class-wp-comment-query.php

     
    254254         *                                                   Default true.
    255255         *     @type bool         $update_comment_post_cache Whether to prime the cache for comment posts.
    256256         *                                                   Default false.
     257         *     @type bool         $suppress_filters          Whether to suppress filters. Default false.
    257258         * }
    258259         */
    259260        public function __construct( $query = '' ) {
     
    301302                        'hierarchical' => false,
    302303                        'update_comment_meta_cache' => true,
    303304                        'update_comment_post_cache' => false,
     305                        'suppress_filters' => false,
    304306                );
    305307
    306308                if ( ! empty( $query ) ) {
     
    482484         * @global wpdb $wpdb WordPress database abstraction object.
    483485         */
    484486        protected function get_comment_ids() {
    485                 global $wpdb;
     487                global $wp_query, $wpdb;
    486488
    487489                // Assemble clauses related to 'comment_approved'.
    488490                $approved_clauses = array();
     
    650652                        }
    651653                }
    652654
     655                if ( ! $this->query_vars['suppress_filters'] && is_comment_feed() ) {
     656                        $limits = apply_filters( 'comment_feed_limits', $limits, $wp_query );
     657                }
     658
    653659                if ( $this->query_vars['count'] ) {
    654660                        $fields = 'COUNT(*)';
    655661                } else {
     
    841847                        }
    842848                }
    843849
     850                if ( ! $this->query_vars['suppress_filters'] && is_comment_feed() ) {
     851                        $join = apply_filters( 'comment_feed_join', $join, $wp_query );
     852                }
     853
    844854                if ( ! empty( $this->query_vars['date_query'] ) && is_array( $this->query_vars['date_query'] ) ) {
    845855                        $this->date_query = new WP_Date_Query( $this->query_vars['date_query'], 'comment_date' );
    846856                        $this->sql_clauses['where']['date_query'] = preg_replace( '/^\s*AND\s*/', '', $this->date_query->get_sql() );
     
    868878
    869879                $this->filtered_where_clause = $where;
    870880
     881                if ( ! $this->query_vars['suppress_filters'] && is_comment_feed() ) {
     882                        $where = apply_filters( 'comment_feed_where', $where, $wp_query );
     883                }
     884
    871885                if ( $where ) {
    872886                        $where = 'WHERE ' . $where;
    873887                }
    874888
     889                if ( ! $this->query_vars['suppress_filters'] && is_comment_feed() ) {
     890                        $groupby = apply_filters( 'comment_feed_groupby', $groupby, $wp_query );
     891                }
     892
    875893                if ( $groupby ) {
    876894                        $groupby = 'GROUP BY ' . $groupby;
    877895                }
    878896
     897                if ( ! $this->query_vars['suppress_filters'] && is_comment_feed() ) {
     898                        $orderby = apply_filters( 'comment_feed_orderby', $orderby, $wp_query );
     899                }
     900
    879901                if ( $orderby ) {
    880902                        $orderby = "ORDER BY $orderby";
    881903                }
  • src/wp-includes/query.php

     
    32163216
    32173217                // Comments feeds
    32183218                if ( $this->is_comment_feed && ! $this->is_singular ) {
    3219                         if ( $this->is_archive || $this->is_search ) {
    3220                                 $cjoin = "JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID = $wpdb->posts.ID) $join ";
    3221                                 $cwhere = "WHERE comment_approved = '1' $where";
    3222                                 $cgroupby = "$wpdb->comments.comment_id";
    3223                         } else { // Other non singular e.g. front
    3224                                 $cjoin = "JOIN $wpdb->posts ON ( $wpdb->comments.comment_post_ID = $wpdb->posts.ID )";
    3225                                 $cwhere = "WHERE ( post_status = 'publish' OR ( post_status = 'inherit' && post_type = 'attachment' ) ) AND comment_approved = '1'";
    3226                                 $cgroupby = '';
    3227                         }
    32283219
    3229                         if ( !$q['suppress_filters'] ) {
    3230                                 /**
    3231                                  * Filters the JOIN clause of the comments feed query before sending.
    3232                                  *
    3233                                  * @since 2.2.0
    3234                                  *
    3235                                  * @param string   $cjoin The JOIN clause of the query.
    3236                                  * @param WP_Query &$this The WP_Query instance (passed by reference).
    3237                                  */
    3238                                 $cjoin = apply_filters_ref_array( 'comment_feed_join', array( $cjoin, &$this ) );
     3220                        $comment_args = array(
     3221                                'orderby'                   => 'comment_date_gmt',
     3222                                'order'                     => 'DESC',
     3223                                'status'                    => 'approve',
     3224                                'post__in'                  => wp_list_pluck( $this->posts, 'ID' ),
     3225                                'no_found_rows'             => false,
     3226                                'number'                    => get_option( 'posts_per_rss' ),
     3227                                'suppress_filters'          => $q['suppress_filters'],
     3228                                'update_comment_meta_cache' => false, // We lazy-load comment meta for performance.
     3229                        );
    32393230
    3240                                 /**
    3241                                  * Filters the WHERE clause of the comments feed query before sending.
    3242                                  *
    3243                                  * @since 2.2.0
    3244                                  *
    3245                                  * @param string   $cwhere The WHERE clause of the query.
    3246                                  * @param WP_Query &$this  The WP_Query instance (passed by reference).
    3247                                  */
    3248                                 $cwhere = apply_filters_ref_array( 'comment_feed_where', array( $cwhere, &$this ) );
    3249 
    3250                                 /**
    3251                                  * Filters the GROUP BY clause of the comments feed query before sending.
    3252                                  *
    3253                                  * @since 2.2.0
    3254                                  *
    3255                                  * @param string   $cgroupby The GROUP BY clause of the query.
    3256                                  * @param WP_Query &$this    The WP_Query instance (passed by reference).
    3257                                  */
    3258                                 $cgroupby = apply_filters_ref_array( 'comment_feed_groupby', array( $cgroupby, &$this ) );
    3259 
    3260                                 /**
    3261                                  * Filters the ORDER BY clause of the comments feed query before sending.
    3262                                  *
    3263                                  * @since 2.8.0
    3264                                  *
    3265                                  * @param string   $corderby The ORDER BY clause of the query.
    3266                                  * @param WP_Query &$this    The WP_Query instance (passed by reference).
    3267                                  */
    3268                                 $corderby = apply_filters_ref_array( 'comment_feed_orderby', array( 'comment_date_gmt DESC', &$this ) );
    3269 
    3270                                 /**
    3271                                  * Filters the LIMIT clause of the comments feed query before sending.
    3272                                  *
    3273                                  * @since 2.8.0
    3274                                  *
    3275                                  * @param string   $climits The JOIN clause of the query.
    3276                                  * @param WP_Query &$this   The WP_Query instance (passed by reference).
    3277                                  */
    3278                                 $climits = apply_filters_ref_array( 'comment_feed_limits', array( 'LIMIT ' . get_option('posts_per_rss'), &$this ) );
    3279                         }
    3280                         $cgroupby = ( ! empty( $cgroupby ) ) ? 'GROUP BY ' . $cgroupby : '';
    3281                         $corderby = ( ! empty( $corderby ) ) ? 'ORDER BY ' . $corderby : '';
    3282 
    3283                         $comments = (array) $wpdb->get_results("SELECT $distinct $wpdb->comments.* FROM $wpdb->comments $cjoin $cwhere $cgroupby $corderby $climits");
    3284                         // Convert to WP_Comment
    3285                         $this->comments = array_map( 'get_comment', $comments );
     3231                        $comment_args = apply_filters( 'comments_feed_query_args', $comment_args );
     3232                        $comment_query = new WP_Comment_Query( $comment_args );
     3233                        $this->comments = $comment_query->comments;
    32863234                        $this->comment_count = count($this->comments);
    32873235
    32883236                        $post_ids = array();
     
    36353583                }
    36363584
    36373585                if ( !empty($this->posts) && $this->is_comment_feed && $this->is_singular ) {
    3638                         /** This filter is documented in wp-includes/query.php */
    3639                         $cjoin = apply_filters_ref_array( 'comment_feed_join', array( '', &$this ) );
    36403586
    3641                         /** This filter is documented in wp-includes/query.php */
    3642                         $cwhere = apply_filters_ref_array( 'comment_feed_where', array( "WHERE comment_post_ID = '{$this->posts[0]->ID}' AND comment_approved = '1'", &$this ) );
     3587                        $comment_args = array(
     3588                                'orderby'                   => 'comment_date_gmt',
     3589                                'order'                     => 'DESC',
     3590                                'status'                    => 'approve',
     3591                                'post_id'                   => $this->posts[0]->ID,
     3592                                'no_found_rows'             => false,
     3593                                'number'                    => get_option( 'posts_per_rss' ),
     3594                                'update_comment_meta_cache' => false, // We lazy-load comment meta for performance.
     3595                                'suppress_filters'          => $q['suppress_filters'],
     3596                        );
    36433597
    3644                         /** This filter is documented in wp-includes/query.php */
    3645                         $cgroupby = apply_filters_ref_array( 'comment_feed_groupby', array( '', &$this ) );
    3646                         $cgroupby = ( ! empty( $cgroupby ) ) ? 'GROUP BY ' . $cgroupby : '';
    3647 
    3648                         /** This filter is documented in wp-includes/query.php */
    3649                         $corderby = apply_filters_ref_array( 'comment_feed_orderby', array( 'comment_date_gmt DESC', &$this ) );
    3650                         $corderby = ( ! empty( $corderby ) ) ? 'ORDER BY ' . $corderby : '';
    3651 
    3652                         /** This filter is documented in wp-includes/query.php */
    3653                         $climits = apply_filters_ref_array( 'comment_feed_limits', array( 'LIMIT ' . get_option('posts_per_rss'), &$this ) );
    3654 
    3655                         $comments_request = "SELECT $wpdb->comments.* FROM $wpdb->comments $cjoin $cwhere $cgroupby $corderby $climits";
    3656                         $comments = $wpdb->get_results($comments_request);
    3657                         // Convert to WP_Comment
    3658                         $this->comments = array_map( 'get_comment', $comments );
     3598                        $comment_args = apply_filters( 'comments_feed_query_args', $comment_args );
     3599                        $comment_query = new WP_Comment_Query( $comment_args );
     3600                        $this->comments = $comment_query->comments;
    36593601                        $this->comment_count = count($this->comments);
    36603602                }
    36613603