WordPress.org

Make WordPress Core

Changeset 15755


Ignore:
Timestamp:
10/08/10 02:27:22 (4 years ago)
Author:
nacin
Message:

Add NOT LIKE/BETWEEN/IN. props AaronCampbell, fixes #9124.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/classes.php

    r15750 r15755  
    276276            if ( !empty( $this->query_vars[$wpvar] ) ) { 
    277277                if ( ! is_array( $this->query_vars[$wpvar] ) ) { 
    278                     $this->query_vars[$wpvar] = (string) $this->query_vars[$wpvar];  
     278                    $this->query_vars[$wpvar] = (string) $this->query_vars[$wpvar]; 
    279279                } else { 
    280280                    foreach ( $this->query_vars[$wpvar] as $vkey => $v ) 
     
    551551     * - 'key' string The meta key 
    552552     * - 'value' string|array The meta value 
    553      * - 'compare' (optional) string How to compare the key to the value.  
    554      *      Possible values: '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'IN', 'BETWEEN'.  
     553     * - 'compare' (optional) string How to compare the key to the value. 
     554     *      Possible values: '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN'. 
    555555     *      Default: '=' 
    556556     * - 'type' string (optional) The type of the value. 
    557      *      Possible values: 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', 'UNSIGNED'.  
     557     *      Possible values: 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', 'UNSIGNED'. 
    558558     *      Default: 'CHAR' 
    559559     * 
     
    574574     *      Default: 'slug' 
    575575     * - 'operator' string (optional) 
    576      *      Possible values: 'IN' and 'NOT IN'.  
     576     *      Possible values: 'IN' and 'NOT IN'. 
    577577     *      Default: 'IN' 
    578      * - 'include_children' bool (optional) Wether to include child terms.  
     578     * - 'include_children' bool (optional) Wether to include child terms. 
    579579     *      Default: true 
    580580     * 
     
    637637            $meta_type = isset( $q['type'] ) ? strtoupper( $q['type'] ) : 'CHAR'; 
    638638 
    639             if ( ! in_array( $meta_compare, array( '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'IN', 'BETWEEN' ) ) ) 
     639            if ( ! in_array( $meta_compare, array( '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' ) ) ) 
    640640                $meta_compare = '='; 
    641641 
     
    659659                $where .= $wpdb->prepare( " AND $alias.meta_key = %s", $meta_key ); 
    660660 
    661             if ( in_array( $meta_compare, array( 'IN', 'BETWEEN' ) ) ) { 
     661            if ( in_array( $meta_compare, array( 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' ) ) ) { 
    662662                if ( ! is_array( $meta_value ) ) 
    663663                    $meta_value = preg_split( '/[,\s]+/', $meta_value ); 
     
    669669                continue; 
    670670 
    671             if ( 'IN' == $meta_compare ) { 
     671            if ( 'IN' == substr( $meta_compare, -2) ) { 
    672672                $meta_field_types = substr( str_repeat( ',%s', count( $meta_value ) ), 1 ); 
    673673                $meta_compare_string = "($meta_field_types)"; 
    674674                unset( $meta_field_types ); 
    675             } elseif ( 'BETWEEN' == $meta_compare ) { 
     675            } elseif ( 'BETWEEN' == substr( $meta_compare, -7) ) { 
    676676                $meta_value = array_slice( $meta_value, 0, 2 ); 
    677677                $meta_compare_string = '%s AND %s'; 
    678             } elseif ( 'LIKE' == $meta_compare ) { 
     678            } elseif ( 'LIKE' == substr( $meta_compare, -4 ) ) { 
    679679                $meta_value = '%' . like_escape( $meta_value ) . '%'; 
    680680                $meta_compare_string = '%s'; 
     
    709709 
    710710            $query['do_query'] = false; 
    711              
     711 
    712712            $sql_single = get_objects_in_term( $query['terms'], $query['taxonomy'], $query ); 
    713713 
Note: See TracChangeset for help on using the changeset viewer.