WordPress.org

Make WordPress Core

Ticket #16742: 16742.2.diff

File 16742.2.diff, 2.9 KB (added by ryan, 7 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'];