Make WordPress Core


Ignore:
File:
1 edited

Legend:

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

    r17805 r18268  
    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;
     
    16261642        }
    16271643
    1628         if ( !empty($qv['post_status']) )
    1629             $qv['post_status'] = preg_replace('|[^a-z0-9_,-]|', '', $qv['post_status']);
     1644        if ( ! empty( $qv['post_status'] ) ) {
     1645            if ( is_array( $qv['post_status'] ) )
     1646                $qv['post_status'] = array_map('sanitize_key', $qv['post_status']);
     1647            else
     1648                $qv['post_status'] = preg_replace('|[^a-z0-9_,-]|', '', $qv['post_status']);
     1649        }
    16301650
    16311651        if ( $this->is_posts_page && ( ! isset($qv['withcomments']) || ! $qv['withcomments'] ) )
     
    18971917        $q = $this->fill_query_vars($q);
    18981918
     1919        // Parse meta query
     1920        $this->meta_query = new WP_Meta_Query();
     1921        $this->meta_query->parse_query_vars( $q );
     1922
    18991923        // Set a flag if a pre_get_posts hook changed the query vars.
    19001924        $hash = md5( serialize( $this->query_vars ) );
     
    21562180                $searchand = ' AND ';
    21572181            }
    2158             $term = esc_sql( like_escape( $q['s'] ) );
    2159             if ( empty($q['sentence']) && count($q['search_terms']) > 1 && $q['search_terms'][0] != $q['s'] )
    2160                 $search .= " OR ($wpdb->posts.post_title LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}')";
    21612182
    21622183            if ( !empty($search) ) {
     
    22302251                unset( $tag_query );
    22312252            }
     2253        }
     2254
     2255        if ( !empty( $this->tax_query->queries ) || !empty( $this->meta_query->queries ) ) {
     2256            $groupby = "{$wpdb->posts}.ID";
    22322257        }
    22332258
     
    22882313        // Order by
    22892314        if ( empty($q['orderby']) ) {
    2290             $q['orderby'] = "$wpdb->posts.post_date " . $q['order'];
     2315            $orderby = "$wpdb->posts.post_date " . $q['order'];
    22912316        } elseif ( 'none' == $q['orderby'] ) {
    2292             $q['orderby'] = '';
     2317            $orderby = '';
    22932318        } else {
    22942319            // Used to filter values
     
    23012326            $q['orderby'] = urldecode($q['orderby']);
    23022327            $q['orderby'] = addslashes_gpc($q['orderby']);
    2303             $orderby_array = explode(' ', $q['orderby']);
    2304             $q['orderby'] = '';
    2305 
    2306             foreach ( $orderby_array as $i => $orderby ) {
     2328
     2329            $orderby_array = array();
     2330            foreach ( explode( ' ', $q['orderby'] ) as $i => $orderby ) {
    23072331                // Only allow certain values for safety
    23082332                if ( ! in_array($orderby, $allowed_keys) )
     
    23322356                }
    23332357
    2334                 $q['orderby'] .= (($i == 0) ? '' : ',') . $orderby;
    2335             }
    2336 
    2337             // append ASC or DESC at the end
    2338             if ( !empty($q['orderby']))
    2339                 $q['orderby'] .= " {$q['order']}";
    2340 
    2341             if ( empty($q['orderby']) )
    2342                 $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']}";
    23432366        }
    23442367
     
    23862409        }
    23872410
    2388         if ( isset($q['post_status']) && '' != $q['post_status'] ) {
     2411        if ( ! empty( $q['post_status'] ) ) {
    23892412            $statuswheres = array();
    2390             $q_status = explode(',', $q['post_status']);
     2413            $q_status = $q['post_status'];
     2414            if ( ! is_array( $q_status ) )
     2415                $q_status = explode(',', $q_status);
    23912416            $r_status = array();
    23922417            $p_status = array();
    23932418            $e_status = array();
    2394             if ( $q['post_status'] == 'any' ) {
     2419            if ( in_array('any', $q_status) ) {
    23952420                foreach ( get_post_stati( array('exclude_from_search' => true) ) as $status )
    23962421                    $e_status[] = "$wpdb->posts.post_status <> '$status'";
     
    24612486        }
    24622487
    2463         // Parse the meta query again if query vars have changed.
    2464         if ( $this->query_vars_changed ) {
    2465             $meta_query_hash = md5( serialize( $q['meta_query'] ) );
    2466             $_meta_query = $q['meta_query'];
    2467             unset( $q['meta_query'] );
    2468             _parse_meta_query( $q );
    2469             if ( md5( serialize( $q['meta_query'] ) ) != $meta_query_hash && is_array( $_meta_query ) )
    2470                 $q['meta_query'] = array_merge( $_meta_query, $q['meta_query'] );
    2471         }
    2472 
    2473         if ( !empty( $q['meta_query'] ) ) {
    2474             $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 );
    24752490            $join .= $clauses['join'];
    24762491            $where .= $clauses['where'];
    2477         }
    2478 
    2479         if ( ! empty( $this->tax_query->queries ) || ! empty( $q['meta_query'] ) ) {
    2480             $groupby = "{$wpdb->posts}.ID";
    24812492        }
    24822493
     
    25422553                $where = "AND 0";
    25432554        }
    2544 
    2545         $orderby = $q['orderby'];
    25462555
    25472556        $pieces = array( 'where', 'groupby', 'join', 'orderby', 'distinct', 'fields', 'limits' );
     
    29682977
    29692978    /**
    2970      * PHP4 type constructor.
     2979     * Constructor.
    29712980     *
    29722981     * Sets up the WordPress query, if parameter is not empty.
     
    29782987     * @return WP_Query
    29792988     */
    2980     function WP_Query($query = '') {
     2989    function __construct($query = '') {
    29812990        if ( ! empty($query) ) {
    29822991            $this->query($query);
     
    35103519            return;
    35113520
    3512         wp_redirect($link, '301'); // Permanent redirect
     3521        wp_redirect( $link, 301 ); // Permanent redirect
    35133522        exit;
    35143523    endif;
Note: See TracChangeset for help on using the changeset viewer.