WordPress.org

Make WordPress Core

Ticket #19729: meta.diff

File meta.diff, 1.1 KB (added by joehoyle, 6 years ago)
  • wp-includes/meta.php

     
    707707                $join = array();
    708708                $where = array();
    709709
     710                $key_only_queries = array();
     711                $queries = array();
     712               
     713                // Split out the meta_key only queries (we can only do this for OR)
    710714                foreach ( $this->queries as $k => $q ) {
     715                        if ( $this->relation == 'OR' && ! isset( $q['value'] ) && ! empty( $q['key'] ) )
     716                                $key_only_queries[$k] = $q;
     717                       
     718                        else
     719                                $queries[$k] = $q;
     720                }
     721               
     722                // Specify all the meta_key only queries in one go
     723                if ( $key_only_queries ) {
     724                        $join[]  = "INNER JOIN $meta_table ON $primary_table.$primary_id_column = $meta_table.$meta_id_column";
     725                       
     726                        foreach ( $key_only_queries as $key => $q )
     727                                $where["key-only-$key"] = $wpdb->prepare( "$meta_table.meta_key = %s", trim( $q['key'] ) );
     728                }
     729                                               
     730                foreach ( $queries as $k => $q ) {
    711731                        $meta_key = isset( $q['key'] ) ? trim( $q['key'] ) : '';
    712732                        $meta_type = isset( $q['type'] ) ? strtoupper( $q['type'] ) : 'CHAR';
    713733