Changes in branches/3.1/wp-includes/query.php [17553:17456]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3.1/wp-includes/query.php
r17553 r17456 1232 1232 1233 1233 /** 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. 1236 1235 * 1237 1236 * @since 3.1.0 1238 1237 * @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; 1250 1241 1251 1242 /** … … 1405 1396 $this->query_vars = $this->fill_query_vars($this->query_vars); 1406 1397 $qv = &$this->query_vars; 1407 $this->query_vars_changed = true;1408 1398 1409 1399 if ( ! empty($qv['robots']) ) … … 1507 1497 } 1508 1498 1509 $this-> query_vars_hash= false;1499 $this->parsed_tax_query = false; 1510 1500 $this->parse_tax_query( $qv ); 1511 1501 … … 1638 1628 $this->set_404(); 1639 1629 1640 $this->query_vars_hash = md5( serialize( $this->query_vars ) );1641 $this->query_vars_changed = false;1642 1643 1630 do_action_ref_array('parse_query', array(&$this)); 1644 1631 } … … 1668 1655 1669 1656 foreach ( $GLOBALS['wp_taxonomies'] as $taxonomy => $t ) { 1670 if ( 'post_tag' == $taxonomy )1671 continue; // Handled further down in the $q['tag'] block1672 1673 1657 if ( $t->query_var && !empty( $q[$t->query_var] ) ) { 1674 1658 $tax_query_defaults = array( … … 1699 1683 1700 1684 // 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 ) { 1702 1686 $q['cat'] = ''.urldecode($q['cat']).''; 1703 1687 $q['cat'] = addslashes_gpc($q['cat']); … … 1753 1737 1754 1738 // Tag stuff 1755 if ( '' != $q['tag'] && !$this->is_singular && $this->query_vars_changed) {1739 if ( '' != $q['tag'] && !$this->is_singular && !$this->parsed_tax_query ) { 1756 1740 if ( strpos($q['tag'], ',') !== false ) { 1757 1741 $tags = preg_split('/[,\s]+/', $q['tag']); … … 1807 1791 1808 1792 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']); 1810 1794 $tax_query[] = array( 1811 1795 'taxonomy' => 'post_tag', … … 1816 1800 1817 1801 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']); 1819 1803 $tax_query[] = array( 1820 1804 'taxonomy' => 'post_tag', … … 1825 1809 } 1826 1810 1811 $this->parsed_tax_query = true; 1812 1827 1813 $this->tax_query = new WP_Tax_Query( $tax_query ); 1828 1814 } … … 1894 1880 $q = &$this->query_vars; 1895 1881 1896 // Fill again in case pre_get_posts unset some vars.1897 1882 $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);1906 1883 1907 1884 // First let's clear some variables … … 2171 2148 2172 2149 // 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']; 2181 2156 2182 2157 if ( $this->is_tax ) { … … 2463 2438 2464 2439 $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'] );2475 2440 } 2476 2441 … … 2928 2893 $this->queried_object = $term; 2929 2894 $this->queried_object_id = (int) $term->term_id; 2930 2931 if ( $this->is_category )2932 _make_cat_compat( $this->queried_object );2933 2895 } 2934 2896 } elseif ( $this->is_post_type_archive ) {
Note: See TracChangeset
for help on using the changeset viewer.