Make WordPress Core


Ignore:
File:
1 edited

Legend:

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

    r18047 r18330  
    850850
    851851    /**
     852     * Metadata query container
     853     *
     854     * @since 3.2.0
     855     * @access public
     856     * @var object WP_Meta_Query
     857     */
     858    var $meta_query = false;
     859
     860    /**
    852861     * Holds the data for a single object that is queried.
    853862     *
     
    12481257     */
    12491258    var $query_vars_changed = true;
     1259
     1260    /**
     1261     * Set if post thumbnails are cached
     1262     *
     1263     * @since 3.2.0
     1264     * @access public
     1265     * @var bool
     1266     */
     1267     var $thumbnails_cached = false;
    12501268
    12511269    /**
     
    15261544            unset( $tax_query );
    15271545
    1528             _parse_meta_query( $qv );
    1529 
    15301546            if ( empty($qv['author']) || ($qv['author'] == '0') ) {
    15311547                $this->is_author = false;
     
    19011917        $q = $this->fill_query_vars($q);
    19021918
     1919        // Parse meta query
     1920        $this->meta_query = new WP_Meta_Query();
     1921        $this->meta_query->parse_query_vars( $q );
     1922
    19031923        // Set a flag if a pre_get_posts hook changed the query vars.
    19041924        $hash = md5( serialize( $this->query_vars ) );
     
    21602180                $searchand = ' AND ';
    21612181            }
    2162             $term = esc_sql( like_escape( $q['s'] ) );
    2163             if ( empty($q['sentence']) && count($q['search_terms']) > 1 && $q['search_terms'][0] != $q['s'] )
    2164                 $search .= " OR ($wpdb->posts.post_title LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}')";
    21652182
    21662183            if ( !empty($search) ) {
     
    22342251                unset( $tag_query );
    22352252            }
     2253        }
     2254
     2255        if ( !empty( $this->tax_query->queries ) || !empty( $this->meta_query->queries ) ) {
     2256            $groupby = "{$wpdb->posts}.ID";
    22362257        }
    22372258
     
    22922313        // Order by
    22932314        if ( empty($q['orderby']) ) {
    2294             $q['orderby'] = "$wpdb->posts.post_date " . $q['order'];
     2315            $orderby = "$wpdb->posts.post_date " . $q['order'];
    22952316        } elseif ( 'none' == $q['orderby'] ) {
    2296             $q['orderby'] = '';
     2317            $orderby = '';
    22972318        } else {
    22982319            // Used to filter values
     
    23052326            $q['orderby'] = urldecode($q['orderby']);
    23062327            $q['orderby'] = addslashes_gpc($q['orderby']);
    2307             $orderby_array = explode(' ', $q['orderby']);
    2308             $q['orderby'] = '';
    2309 
    2310             foreach ( $orderby_array as $i => $orderby ) {
     2328
     2329            $orderby_array = array();
     2330            foreach ( explode( ' ', $q['orderby'] ) as $i => $orderby ) {
    23112331                // Only allow certain values for safety
    23122332                if ( ! in_array($orderby, $allowed_keys) )
     
    23362356                }
    23372357
    2338                 $q['orderby'] .= (($i == 0) ? '' : ',') . $orderby;
    2339             }
    2340 
    2341             // append ASC or DESC at the end
    2342             if ( !empty($q['orderby']))
    2343                 $q['orderby'] .= " {$q['order']}";
    2344 
    2345             if ( empty($q['orderby']) )
    2346                 $q['orderby'] = "$wpdb->posts.post_date ".$q['order'];
     2358                $orderby_array[] = $orderby;
     2359            }
     2360            $orderby = implode( ',', $orderby_array );
     2361
     2362            if ( empty( $orderby ) )
     2363                $orderby = "$wpdb->posts.post_date ".$q['order'];
     2364            else
     2365                $orderby .= " {$q['order']}";
    23472366        }
    23482367
     
    24672486        }
    24682487
    2469         // Parse the meta query again if query vars have changed.
    2470         if ( $this->query_vars_changed ) {
    2471             $meta_query_hash = md5( serialize( $q['meta_query'] ) );
    2472             $_meta_query = $q['meta_query'];
    2473             unset( $q['meta_query'] );
    2474             _parse_meta_query( $q );
    2475             if ( md5( serialize( $q['meta_query'] ) ) != $meta_query_hash && is_array( $_meta_query ) )
    2476                 $q['meta_query'] = array_merge( $_meta_query, $q['meta_query'] );
    2477         }
    2478 
    2479         if ( !empty( $q['meta_query'] ) ) {
    2480             $clauses = call_user_func_array( '_get_meta_sql', array( $q['meta_query'], 'post', $wpdb->posts, 'ID', &$this) );
     2488        if ( !empty( $this->meta_query->queries ) ) {
     2489            $clauses = $this->meta_query->get_sql( 'post', $wpdb->posts, 'ID', $this );
    24812490            $join .= $clauses['join'];
    24822491            $where .= $clauses['where'];
    2483         }
    2484 
    2485         if ( ! empty( $this->tax_query->queries ) || ! empty( $q['meta_query'] ) ) {
    2486             $groupby = "{$wpdb->posts}.ID";
    24872492        }
    24882493
     
    25482553                $where = "AND 0";
    25492554        }
    2550 
    2551         $orderby = $q['orderby'];
    25522555
    25532556        $pieces = array( 'where', 'groupby', 'join', 'orderby', 'distinct', 'fields', 'limits' );
     
    29742977
    29752978    /**
    2976      * PHP4 type constructor.
     2979     * Constructor.
    29772980     *
    29782981     * Sets up the WordPress query, if parameter is not empty.
     
    29842987     * @return WP_Query
    29852988     */
    2986     function WP_Query($query = '') {
     2989    function __construct($query = '') {
    29872990        if ( ! empty($query) ) {
    29882991            $this->query($query);
     
    34913494            $post_type = 'post';
    34923495
     3496        if ( is_array( $post_type ) ) {
     3497            if ( count( $post_type ) > 1 )
     3498                return;
     3499            $post_type = array_shift( $post_type );
     3500        }
     3501
    34933502        // Do not attempt redirect for hierarchical post types
    34943503        if ( is_post_type_hierarchical( $post_type ) )
     
    35163525            return;
    35173526
    3518         wp_redirect($link, '301'); // Permanent redirect
     3527        wp_redirect( $link, 301 ); // Permanent redirect
    35193528        exit;
    35203529    endif;
Note: See TracChangeset for help on using the changeset viewer.