WordPress.org

Make WordPress Core

Ticket #19729: meta.php

File meta.php, 1.1 KB (added by joehoyle, 2 years ago)
Line 
1Index: wp-includes/meta.php
2===================================================================
3--- wp-includes/meta.php        (revision 19667)
4+++ wp-includes/meta.php        (working copy)
5@@ -707,7 +707,27 @@
6                $join = array();
7                $where = array();
8 
9+               $key_only_queries = array();
10+               $queries = array();
11+               
12+               // Split out the meta_key only queries (we can only do this for OR)
13                foreach ( $this->queries as $k => $q ) {
14+                       if ( $this->relation == 'OR' && ! isset( $q['value'] ) && ! empty( $q['key'] ) )
15+                               $key_only_queries[$k] = $q;
16+                       
17+                       else
18+                               $queries[$k] = $q;
19+               }
20+               
21+               // Specify all the meta_key only queries in one go
22+               if ( $key_only_queries ) {
23+                       $join[]  = "INNER JOIN $meta_table ON $primary_table.$primary_id_column = $meta_table.$meta_id_column";
24+                       
25+                       foreach ( $key_only_queries as $key => $q )
26+                               $where["key-only-$key"] = $wpdb->prepare( "$meta_table.meta_key = %s", trim( $q['key'] ) );
27+               }
28+                                               
29+               foreach ( $queries as $k => $q ) {
30                        $meta_key = isset( $q['key'] ) ? trim( $q['key'] ) : '';
31                        $meta_type = isset( $q['type'] ) ? strtoupper( $q['type'] ) : 'CHAR';
32