| 1 | Index: wp-includes/query.php |
|---|
| 2 | =================================================================== |
|---|
| 3 | --- wp-includes/query.php (revision 17644) |
|---|
| 4 | +++ wp-includes/query.php (working copy) |
|---|
| 5 | @@ -2478,6 +2478,7 @@ |
|---|
| 6 | $clauses = call_user_func_array( '_get_meta_sql', array( $q['meta_query'], 'post', $wpdb->posts, 'ID', &$this) ); |
|---|
| 7 | $join .= $clauses['join']; |
|---|
| 8 | $where .= $clauses['where']; |
|---|
| 9 | + $distinct = 'DISTINCT'; |
|---|
| 10 | } |
|---|
| 11 | |
|---|
| 12 | // Apply filters on where and join prior to paging so that any |
|---|
| 13 | Index: wp-includes/meta.php |
|---|
| 14 | =================================================================== |
|---|
| 15 | --- wp-includes/meta.php (revision 17644) |
|---|
| 16 | +++ wp-includes/meta.php (working copy) |
|---|
| 17 | @@ -382,10 +382,18 @@ |
|---|
| 18 | |
|---|
| 19 | $meta_id_column = esc_sql( $type . '_id' ); |
|---|
| 20 | |
|---|
| 21 | + $relation = 'AND'; |
|---|
| 22 | + if( isset( $meta_query['relation'] ) && strtoupper( $meta_query['relation'] ) == 'OR' ) { |
|---|
| 23 | + $relation = 'OR'; |
|---|
| 24 | + } else { |
|---|
| 25 | + $meta_query['relation'] = ''; |
|---|
| 26 | + } |
|---|
| 27 | + unset( $meta_query['relation'] ); |
|---|
| 28 | + |
|---|
| 29 | $join = ''; |
|---|
| 30 | - $where = ''; |
|---|
| 31 | + $where = array(); |
|---|
| 32 | $i = 0; |
|---|
| 33 | - foreach ( $meta_query as $q ) { |
|---|
| 34 | + foreach ( $meta_query as $k => $q ) { |
|---|
| 35 | $meta_key = isset( $q['key'] ) ? trim( $q['key'] ) : ''; |
|---|
| 36 | $meta_value = isset( $q['value'] ) ? $q['value'] : ''; |
|---|
| 37 | $meta_compare = isset( $q['compare'] ) ? strtoupper( $q['compare'] ) : '='; |
|---|
| 38 | @@ -411,7 +419,7 @@ |
|---|
| 39 | $i++; |
|---|
| 40 | |
|---|
| 41 | if ( !empty( $meta_key ) ) |
|---|
| 42 | - $where .= $wpdb->prepare( " AND $alias.meta_key = %s", $meta_key ); |
|---|
| 43 | + $where[$k] = $wpdb->prepare( "($alias.meta_key = %s", $meta_key ); |
|---|
| 44 | |
|---|
| 45 | if ( in_array( $meta_compare, array( 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' ) ) ) { |
|---|
| 46 | if ( ! is_array( $meta_value ) ) |
|---|
| 47 | @@ -439,8 +447,10 @@ |
|---|
| 48 | if ( '_wp_zero_value' == $meta_value ) |
|---|
| 49 | $meta_value = 0; |
|---|
| 50 | |
|---|
| 51 | - $where .= $wpdb->prepare( " AND CAST($alias.meta_value AS {$meta_type}) {$meta_compare} {$meta_compare_string}", $meta_value ); |
|---|
| 52 | + $where[$k] .= $wpdb->prepare( " AND CAST($alias.meta_value AS {$meta_type}) {$meta_compare} {$meta_compare_string})", $meta_value ); |
|---|
| 53 | } |
|---|
| 54 | + |
|---|
| 55 | + $where = ' AND ( '. implode( " $relation ", $where ) .' )'; |
|---|
| 56 | |
|---|
| 57 | return apply_filters_ref_array( 'get_meta_sql', array( compact( 'join', 'where' ), $meta_query, $type, $primary_table, $primary_id_column, &$context ) ); |
|---|
| 58 | } |
|---|