WordPress.org

Make WordPress Core

Ticket #16706: 16706.diff

File 16706.diff, 930 bytes (added by scribu, 7 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 ) )