Make WordPress Core


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3.1/wp-includes/query.php

    r17553 r17456  
    12321232
    12331233    /**
    1234      * Stores the ->query_vars state like md5(serialize( $this->query_vars ) ) so we know
    1235      * whether we have to re-parse because something has changed
     1234     * Whether the tax query has been parsed once.
    12361235     *
    12371236     * @since 3.1.0
    12381237     * @access private
    1239      */
    1240     var $query_vars_hash = false;
    1241 
    1242     /**
    1243      * Whether query vars have changed since the initial parse_query() call.  Used to catch modifications to query vars made
    1244      * via pre_get_posts hooks.
    1245      *
    1246      * @since 3.1.1
    1247      * @access private
    1248      */
    1249     var $query_vars_changed = true;
     1238     * @var bool
     1239     */
     1240    var $parsed_tax_query = false;
    12501241
    12511242    /**
     
    14051396        $this->query_vars = $this->fill_query_vars($this->query_vars);
    14061397        $qv = &$this->query_vars;
    1407         $this->query_vars_changed = true;
    14081398
    14091399        if ( ! empty($qv['robots']) )
     
    15071497            }
    15081498
    1509             $this->query_vars_hash = false;
     1499            $this->parsed_tax_query = false;
    15101500            $this->parse_tax_query( $qv );
    15111501
     
    16381628            $this->set_404();
    16391629
    1640         $this->query_vars_hash = md5( serialize( $this->query_vars ) );
    1641         $this->query_vars_changed = false;
    1642 
    16431630        do_action_ref_array('parse_query', array(&$this));
    16441631    }
     
    16681655
    16691656        foreach ( $GLOBALS['wp_taxonomies'] as $taxonomy => $t ) {
    1670             if ( 'post_tag' == $taxonomy )
    1671                 continue;   // Handled further down in the $q['tag'] block
    1672 
    16731657            if ( $t->query_var && !empty( $q[$t->query_var] ) ) {
    16741658                $tax_query_defaults = array(
     
    16991683
    17001684        // Category stuff
    1701         if ( !empty($q['cat']) && '0' != $q['cat'] && !$this->is_singular && $this->query_vars_changed ) {
     1685        if ( !empty($q['cat']) && '0' != $q['cat'] && !$this->is_singular && !$this->parsed_tax_query ) {
    17021686            $q['cat'] = ''.urldecode($q['cat']).'';
    17031687            $q['cat'] = addslashes_gpc($q['cat']);
     
    17531737
    17541738        // Tag stuff
    1755         if ( '' != $q['tag'] && !$this->is_singular && $this->query_vars_changed ) {
     1739        if ( '' != $q['tag'] && !$this->is_singular && !$this->parsed_tax_query ) {
    17561740            if ( strpos($q['tag'], ',') !== false ) {
    17571741                $tags = preg_split('/[,\s]+/', $q['tag']);
     
    18071791
    18081792        if ( !empty($q['tag_slug__in']) ) {
    1809             $q['tag_slug__in'] = array_map('sanitize_title', array_unique( (array) $q['tag_slug__in'] ) );
     1793            $q['tag_slug__in'] = array_map('sanitize_title', (array) $q['tag_slug__in']);
    18101794            $tax_query[] = array(
    18111795                'taxonomy' => 'post_tag',
     
    18161800
    18171801        if ( !empty($q['tag_slug__and']) ) {
    1818             $q['tag_slug__and'] = array_map('sanitize_title', array_unique( (array) $q['tag_slug__and'] ) );
     1802            $q['tag_slug__and'] = array_map('sanitize_title', (array) $q['tag_slug__and']);
    18191803            $tax_query[] = array(
    18201804                'taxonomy' => 'post_tag',
     
    18251809        }
    18261810
     1811        $this->parsed_tax_query = true;
     1812
    18271813        $this->tax_query = new WP_Tax_Query( $tax_query );
    18281814    }
     
    18941880        $q = &$this->query_vars;
    18951881
    1896         // Fill again in case pre_get_posts unset some vars.
    18971882        $q = $this->fill_query_vars($q);
    1898 
    1899         // Set a flag if a pre_get_posts hook changed the query vars.
    1900         $hash = md5( serialize( $this->query_vars ) );
    1901         if ( $hash != $this->query_vars_hash ) {
    1902             $this->query_vars_changed = true;
    1903             $this->query_vars_hash = $hash;
    1904         }
    1905         unset($hash);
    19061883
    19071884        // First let's clear some variables
     
    21712148
    21722149        // Taxonomies
    2173         if ( !$this->is_singular ) {
    2174             $this->parse_tax_query( $q );
    2175 
    2176             $clauses = $this->tax_query->get_sql( $wpdb->posts, 'ID' );
    2177 
    2178             $join .= $clauses['join'];
    2179             $where .= $clauses['where'];
    2180         }
     2150        $this->parse_tax_query( $q );
     2151
     2152        $clauses = $this->tax_query->get_sql( $wpdb->posts, 'ID' );
     2153
     2154        $join .= $clauses['join'];
     2155        $where .= $clauses['where'];
    21812156
    21822157        if ( $this->is_tax ) {
     
    24632438
    24642439            $where .= ')';
    2465         }
    2466 
    2467         // Parse the meta query again if query vars have changed.
    2468         if ( $this->query_vars_changed ) {
    2469             $meta_query_hash = md5( serialize( $q['meta_query'] ) );
    2470             $_meta_query = $q['meta_query'];
    2471             unset( $q['meta_query'] );
    2472             _parse_meta_query( $q );
    2473             if ( md5( serialize( $q['meta_query'] ) ) != $meta_query_hash && is_array( $_meta_query ) )
    2474                 $q['meta_query'] = array_merge( $_meta_query, $q['meta_query'] );
    24752440        }
    24762441
     
    29282893                $this->queried_object = $term;
    29292894                $this->queried_object_id = (int) $term->term_id;
    2930 
    2931                 if ( $this->is_category )
    2932                     _make_cat_compat( $this->queried_object );
    29332895            }
    29342896        } elseif ( $this->is_post_type_archive ) {
Note: See TracChangeset for help on using the changeset viewer.