WordPress.org

Make WordPress Core

Ticket #16742: 16742.2.diff

File 16742.2.diff, 2.9 KB (added by ryan, 3 years ago)

query_vars_changed

  • wp-includes/query.php

     
    12401240        var $query_vars_hash = false; 
    12411241 
    12421242        /** 
     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; 
     1250 
     1251        /** 
    12431252         * Resets query flags to false. 
    12441253         * 
    12451254         * The query flags are what page info WordPress was able to figure out. 
     
    13951404 
    13961405                $this->query_vars = $this->fill_query_vars($this->query_vars); 
    13971406                $qv = &$this->query_vars; 
     1407                $this->query_vars_changed = true; 
    13981408 
    13991409                if ( ! empty($qv['robots']) ) 
    14001410                        $this->is_robots = true; 
     
    16281638                        $this->set_404(); 
    16291639 
    16301640                do_action_ref_array('parse_query', array(&$this)); 
     1641 
     1642                $this->query_vars_hash = md5( serialize( $this->query_vars ) ); 
    16311643        } 
    16321644 
    16331645        /* 
     
    16851697                } 
    16861698 
    16871699                // Category stuff 
    1688                 if ( !empty($q['cat']) && '0' != $q['cat'] && !$this->is_singular && md5(serialize( $this->query_vars ) ) != $this->query_vars_hash ) { 
     1700                if ( !empty($q['cat']) && '0' != $q['cat'] && !$this->is_singular && $this->query_vars_changed ) { 
    16891701                        $q['cat'] = ''.urldecode($q['cat']).''; 
    16901702                        $q['cat'] = addslashes_gpc($q['cat']); 
    16911703                        $cat_array = preg_split('/[,\s]+/', $q['cat']); 
     
    17391751                } 
    17401752 
    17411753                // Tag stuff 
    1742                 if ( '' != $q['tag'] && !$this->is_singular && md5(serialize( $this->query_vars ) ) != $this->query_vars_hash ) { 
     1754                if ( '' != $q['tag'] && !$this->is_singular && $this->query_vars_changed ) { 
    17431755                        if ( strpos($q['tag'], ',') !== false ) { 
    17441756                                $tags = preg_split('/[,\s]+/', $q['tag']); 
    17451757                                foreach ( (array) $tags as $tag ) { 
     
    18111823                        ); 
    18121824                } 
    18131825 
    1814                 $this->query_vars_hash = md5(serialize( $this->query_vars ) ); 
    1815  
    18161826                $this->tax_query = new WP_Tax_Query( $tax_query ); 
    18171827        } 
    18181828 
     
    18841894 
    18851895                $q = $this->fill_query_vars($q); 
    18861896 
     1897                // Set a flag if a pre_get_posts hook change the query vars. 
     1898                $hash = md5( serialize( $this->query_vars ) ); 
     1899                $this->query_vars_changed = false; 
     1900                if ( $hash != $this->query_vars_hash ) { 
     1901                        $this->query_vars_changed = true; 
     1902                        $this->query_vars_hash = $hash; 
     1903                } 
     1904                unset($hash); 
     1905 
    18871906                // First let's clear some variables 
    18881907                $distinct = ''; 
    18891908                $whichauthor = ''; 
     
    24442463                        $where .= ')'; 
    24452464                } 
    24462465 
     2466                if ( $this->query_vars_changed ) { 
     2467                        $meta_query_hash = md5( serialize( $q['meta_query'] ) ); 
     2468                        $_meta_query = $q['meta_query']; 
     2469                        unset( $q['meta_query'] ); 
     2470                        _parse_meta_query( $q ); 
     2471                        if ( md5( serialize( $q['meta_query'] ) ) != $meta_query_hash && is_array( $_meta_query ) ) 
     2472                                $q['meta_query'] = array_merge( $_meta_query, $q['meta_query'] ); 
     2473                } 
     2474 
    24472475                if ( !empty( $q['meta_query'] ) ) { 
    24482476                        $clauses = call_user_func_array( '_get_meta_sql', array( $q['meta_query'], 'post', $wpdb->posts, 'ID', &$this) ); 
    24492477                        $join .= $clauses['join'];