WordPress.org

Make WordPress Core

Ticket #16706: 16706.2.diff

File 16706.2.diff, 934 bytes (added by scribu, 7 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 ) ) {