WordPress.org

Make WordPress Core

Ticket #16706: 16706.diff

File 16706.diff, 930 bytes (added by scribu, 4 years ago)
  • wp-includes/taxonomy.php

     
    626626                $where = array(); 
    627627                $i = 0; 
    628628 
    629                 foreach ( $this->queries as $query ) { 
     629                // convert AND queries to IN ones for more efficient SQL 
     630                if ( 'AND' == $this->relation ) { 
     631                        $final_queries = array(); 
     632                        foreach ( $this->queries as $query ) { 
     633                                if ( 'AND' == $query['operator'] && count( $query['terms'] ) <= 10 ) { 
     634                                        foreach ( $query['terms'] as $term ) { 
     635                                                $final_queries[] = array_merge( $query, array( 
     636                                                        'terms' => $term, 
     637                                                        'operator' => 'IN' 
     638                                                ) ); 
     639                                        } 
     640                                } else { 
     641                                        $final_queries[] = $query; 
     642                                } 
     643                        } 
     644                } else { 
     645                        $final_queries = $this->queries; 
     646                } 
     647 
     648                foreach ( $final_queries as $query ) { 
    630649                        extract( $query ); 
    631650 
    632651                        if ( ! taxonomy_exists( $taxonomy ) )