WordPress.org

Make WordPress Core

Ticket #18158: 18158.5.alt.diff

File 18158.5.alt.diff, 2.1 KB (added by scribu, 2 years ago)
  • wp-includes/meta.php

    diff --git wp-includes/meta.php wp-includes/meta.php
    index 3caa808..efa0cfb 100644
    class WP_Meta_Query { 
    716716                        elseif ( ! in_array( $meta_type, array( 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', 'UNSIGNED' ) ) ) 
    717717                                $meta_type = 'CHAR'; 
    718718 
     719                        $meta_value = isset( $q['value'] ) ? $q['value'] : null; 
     720 
     721                        if ( isset( $q['compare'] ) ) 
     722                                $meta_compare = strtoupper( $q['compare'] ); 
     723                        else 
     724                                $meta_compare = is_array( $meta_value ) ? 'IN' : '='; 
     725 
     726                        if ( ! in_array( $meta_compare, array( 
     727                                '=', '!=', '>', '>=', '<', '<=', 
     728                                'LIKE', 'NOT LIKE', 
     729                                'IN', 'NOT IN', 
     730                                'BETWEEN', 'NOT BETWEEN', 
     731                                'IS NULL' 
     732                        ) ) ) 
     733                                $meta_compare = '='; 
     734 
    719735                        $i = count( $join ); 
    720736                        $alias = $i ? 'mt' . $i : $meta_table; 
    721737 
    722                         // Set JOIN 
     738                        if ( $meta_compare == 'IS NULL' ) { 
     739                                $join[$i]  = "LEFT JOIN $meta_table"; 
     740                                $join[$i] .= $i ? " AS $alias" : ''; 
     741                                $join[$i] .= " ON ($primary_table.$primary_id_column = $alias.$meta_id_column AND $alias.meta_key = '$meta_key')"; 
     742 
     743                                $where[$k] = ' ' . $alias . '.' . $meta_id_column . ' IS NULL'; 
     744 
     745                                continue; 
     746                        } 
     747 
    723748                        $join[$i]  = "INNER JOIN $meta_table"; 
    724749                        $join[$i] .= $i ? " AS $alias" : ''; 
    725750                        $join[$i] .= " ON ($primary_table.$primary_id_column = $alias.$meta_id_column)"; 
    class WP_Meta_Query { 
    728753                        if ( !empty( $meta_key ) ) 
    729754                                $where[$k] = $wpdb->prepare( "$alias.meta_key = %s", $meta_key ); 
    730755 
    731                         if ( !isset( $q['value'] ) ) { 
     756                        if ( is_null( $meta_value ) ) { 
    732757                                if ( empty( $where[$k] ) ) 
    733758                                        unset( $join[$i] ); 
    734759                                continue; 
    735760                        } 
    736761 
    737                         $meta_value = $q['value']; 
    738  
    739                         $meta_compare = is_array( $meta_value ) ? 'IN' : '='; 
    740                         if ( isset( $q['compare'] ) ) 
    741                                 $meta_compare = strtoupper( $q['compare'] ); 
    742  
    743                         if ( ! in_array( $meta_compare, array( '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' ) ) ) 
    744                                 $meta_compare = '='; 
    745  
    746762                        if ( in_array( $meta_compare, array( 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' ) ) ) { 
    747763                                if ( ! is_array( $meta_value ) ) 
    748764                                        $meta_value = preg_split( '/[,\s]+/', $meta_value );