WordPress.org

Make WordPress Core

Ticket #19729: 19729.diff

File 19729.diff, 1.2 KB (added by SergeyBiryukov, 3 years ago)
  • wp-includes/meta.php

     
    711711                $join = array(); 
    712712                $where = array(); 
    713713 
    714                 foreach ( $this->queries as $k => $q ) { 
     714                $key_only_queries = array(); 
     715                $queries = array(); 
     716 
     717                // Split out the meta_key only queries (we can only do this for OR) 
     718                if ( 'OR' == $this->relation ) { 
     719                        foreach ( $this->queries as $k => $q ) { 
     720                                if ( ! isset( $q['value'] ) && ! empty( $q['key'] ) ) 
     721                                        $key_only_queries[$k] = $q; 
     722                                else 
     723                                        $queries[$k] = $q; 
     724                        } 
     725                } else { 
     726                        $queries = $this->queries; 
     727                } 
     728 
     729                // Specify all the meta_key only queries in one go 
     730                if ( $key_only_queries ) { 
     731                        $join[]  = "INNER JOIN $meta_table ON $primary_table.$primary_id_column = $meta_table.$meta_id_column"; 
     732 
     733                        foreach ( $key_only_queries as $key => $q ) 
     734                                $where["key-only-$key"] = $wpdb->prepare( "$meta_table.meta_key = %s", trim( $q['key'] ) ); 
     735                } 
     736 
     737                foreach ( $queries as $k => $q ) { 
    715738                        $meta_key = isset( $q['key'] ) ? trim( $q['key'] ) : ''; 
    716739                        $meta_type = isset( $q['type'] ) ? strtoupper( $q['type'] ) : 'CHAR'; 
    717740