Ticket #36696: 36696.patch
File 36696.patch, 1.9 KB (added by , 9 years ago) |
---|
-
src/wp-includes/class-wp-meta-query.php
594 594 $meta_value = trim( $meta_value ); 595 595 } 596 596 597 if ( 'SIGNED' === $meta_type ) { 598 $cast_string = '%d'; 599 } elseif ( 'UNSIGNED' === $meta_type ) { 600 $cast_string = '%u'; 601 } else { 602 $cast_string = '%s'; 603 } 604 597 605 switch ( $meta_compare ) { 598 606 case 'IN' : 599 607 case 'NOT IN' : 600 $meta_compare_string = '(' . substr( str_repeat( ', %s', count( $meta_value ) ), 1 ) . ')';608 $meta_compare_string = '(' . substr( str_repeat( ',' . $cast_string, count( $meta_value ) ), 1 ) . ')'; 601 609 $where = $wpdb->prepare( $meta_compare_string, $meta_value ); 602 610 break; 603 611 … … 604 612 case 'BETWEEN' : 605 613 case 'NOT BETWEEN' : 606 614 $meta_value = array_slice( $meta_value, 0, 2 ); 607 $where = $wpdb->prepare( '%s AND %s', $meta_value );615 $where = $wpdb->prepare( $cast_string . ' AND ' . $cast_string, $meta_value ); 608 616 break; 609 617 610 618 case 'LIKE' : 611 619 case 'NOT LIKE' : 612 620 $meta_value = '%' . $wpdb->esc_like( $meta_value ) . '%'; 613 $where = $wpdb->prepare( '%s', $meta_value ); 621 $where = $wpdb->prepare( '%s', $meta_value ); // Ignore $cast_string. 614 622 break; 615 623 616 624 // EXISTS with a value is interpreted as '='. 617 625 case 'EXISTS' : 618 626 $meta_compare = '='; 619 $where = $wpdb->prepare( '%s', $meta_value );627 $where = $wpdb->prepare( $cast_string, $meta_value ); 620 628 break; 621 629 622 630 // 'value' is ignored for NOT EXISTS. … … 625 633 break; 626 634 627 635 default : 628 $where = $wpdb->prepare( '%s', $meta_value );636 $where = $wpdb->prepare( $cast_string, $meta_value ); 629 637 break; 630 638 631 639 } 632 640 633 if ( $where ) {641 if ( '' !== $where ) { 634 642 $sql_chunks['where'][] = "CAST($alias.meta_value AS {$meta_type}) {$meta_compare} {$where}"; 635 643 } 636 644 }