WordPress.org

Make WordPress Core

Ticket #19729: 19729.diff

File 19729.diff, 1.2 KB (added by SergeyBiryukov, 6 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