Changeset 15715 for trunk/wp-includes/classes.php
- Timestamp:
- 10/04/2010 06:57:13 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-includes/classes.php
r15590 r15715 526 526 527 527 /** 528 * WordPress Query class. 529 * 530 * Abstract class for handling advanced queries 531 * 532 * @package WordPress 533 * @since 3.1.0 534 */ 535 class WP_Object_Query { 536 537 /** 538 * Metadata query 539 * 540 * @since 3.1.0 541 * @access public 542 * @var array 543 */ 544 var $meta_query = array(); 545 546 /* 547 * Populates the $meta_query property 548 * 549 * @access private 550 * @since 3.1.0 551 * 552 * @param array $qv The query variables 553 */ 554 function parse_meta_query( $qv ) { 555 if ( !empty( $qv['meta_query'] ) && is_array( $qv['meta_query'] ) ) { 556 $this->meta_query = $qv['meta_query']; 557 } 558 559 $meta_query = array(); 560 foreach ( array( 'key', 'value', 'compare' ) as $key ) { 561 if ( !empty( $qv[ "meta_$key" ] ) ) 562 $meta_query[ $key ] = $qv[ "meta_$key" ]; 563 } 564 565 if ( !empty( $meta_query ) ) { 566 $this->meta_query[] = $meta_query; 567 } 568 } 569 570 /* 571 * Used internally to generate an SQL string for searching across multiple meta key = value pairs 572 * 573 * @access private 574 * @since 3.1.0 575 * 576 * @param string $primary_table 577 * @param string $primary_id_column 578 * @param string $meta_table 579 * @param string $meta_id_column 580 * @return array( $join_sql, $where_sql ) 581 */ 582 function get_meta_sql( $primary_table, $primary_id_column, $meta_table, $meta_id_column ) { 583 global $wpdb; 584 585 $clauses = array(); 586 587 $join = ''; 588 $where = ''; 589 $i = 0; 590 foreach ( $this->meta_query as $q ) { 591 $meta_key = isset( $q['key'] ) ? trim( $q['key'] ) : ''; 592 $meta_value = isset( $q['value'] ) ? trim( $q['value'] ) : ''; 593 $meta_compare = isset( $q['compare'] ) ? $q['compare'] : '='; 594 595 if ( !in_array( $meta_compare, array( '=', '!=', '>', '>=', '<', '<=', 'like' ) ) ) 596 $meta_compare = '='; 597 598 if ( empty( $meta_key ) && empty( $meta_value ) ) 599 continue; 600 601 $alias = $i ? 'mt' . $i : $meta_table; 602 603 $join .= "\nINNER JOIN $meta_table"; 604 $join .= $i ? " AS $alias" : ''; 605 $join .= " ON ($primary_table.$primary_id_column = $alias.$meta_id_column)"; 606 607 $i++; 608 609 if ( !empty( $meta_key ) ) 610 $where .= $wpdb->prepare( " AND $alias.meta_key = %s", $meta_key ); 611 612 if ( empty( $meta_value ) ) 613 continue; 614 615 if ( 'like' == $meta_compare ) { 616 $where .= $wpdb->prepare( " AND $alias.meta_value LIKE %s", '%' . like_escape( $meta_value ) . '%' ); 617 } else { 618 $where .= $wpdb->prepare( " AND $alias.meta_value $meta_compare %s", $meta_value ); 619 } 620 } 621 622 return array( $join, $where ); 623 } 624 } 625 626 /** 528 627 * WordPress Error class. 529 628 *
Note: See TracChangeset
for help on using the changeset viewer.