Make WordPress Core


Ignore:
Timestamp:
08/30/2016 02:48:00 PM (9 years ago)
Author:
boonebgorges
Message:

Comments: Don't do direct SQL query when fetching decendants.

The SQL query was built using the clauses compiled when querying for
top-level comments. But in cases where the top-level comment query
results are already in the cache, the SQL clauses are not built, and
so are unavailable for fill_descendants(). Instead, we call
get_comments(), using modified versions of the parameters passed
to the main WP_Comment_Query class.

Props Akeif, Rarst for testing.
Fixes #37696.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-wp-comment-query.php

    r38336 r38446  
    991991
    992992            if ( $uncached_parent_ids ) {
    993                 $where = 'WHERE ' . $_where . ' AND comment_parent IN (' . implode( ',', array_map( 'intval', $uncached_parent_ids ) ) . ')';
    994                 $level_comments = $this->db->get_results( "SELECT {$this->db->comments}.comment_ID, {$this->db->comments}.comment_parent {$this->sql_clauses['from']} {$where} {$this->sql_clauses['groupby']} ORDER BY comment_date_gmt ASC, comment_ID ASC" );
     993                // Fetch this level of comments.
     994                $parent_query_args = $this->query_vars;
     995                foreach ( $exclude_keys as $exclude_key ) {
     996                    $parent_query_args[ $exclude_key ] = '';
     997                }
     998                $parent_query_args['parent__in']    = $uncached_parent_ids;
     999                $parent_query_args['no_found_rows'] = true;
     1000                $parent_query_args['hierarchical']  = false;
     1001
     1002                $level_comments = get_comments( $parent_query_args );
    9951003
    9961004                // Cache parent-child relationships.
Note: See TracChangeset for help on using the changeset viewer.