WordPress.org

Make WordPress Core

Ticket #16706: 16706.2.diff

File 16706.2.diff, 934 bytes (added by scribu, 3 years ago)

refresh

  • wp-includes/taxonomy.php

     
    636636                $where = array(); 
    637637                $i = 0; 
    638638 
    639                 foreach ( $this->queries as $query ) { 
     639                // convert AND queries to IN ones for more efficient SQL 
     640                if ( 'AND' == $this->relation ) { 
     641                        $final_queries = array(); 
     642                        foreach ( $this->queries as $query ) { 
     643                                if ( 'AND' == $query['operator'] && count( $query['terms'] ) <= 10 ) { 
     644                                        foreach ( $query['terms'] as $term ) { 
     645                                                $final_queries[] = array_merge( $query, array( 
     646                                                        'terms' => $term, 
     647                                                        'operator' => 'IN' 
     648                                                ) ); 
     649                                        } 
     650                                } else { 
     651                                        $final_queries[] = $query; 
     652                                } 
     653                        } 
     654                } else { 
     655                        $final_queries = $this->queries; 
     656                } 
     657 
     658                foreach ( $final_queries as $query ) { 
    640659                        $this->clean_query( $query ); 
    641660 
    642661                        if ( is_wp_error( $query ) ) {