WordPress.org

Make WordPress Core

Ticket #16152: 16152.diff

File 16152.diff, 2.2 KB (added by ryan, 5 years ago)

Parse cat once.

  • wp-includes/query.php

     
    12311231        var $is_post_type_archive = false; 
    12321232 
    12331233        /** 
     1234         * Whether the tax query has been parsed once. 
     1235         * 
     1236         * @since 3.1.0 
     1237         * @access private 
     1238         * @var bool 
     1239         */ 
     1240        var $parsed_tax_query = false; 
     1241 
     1242        /** 
    12341243         * Resets query flags to false. 
    12351244         * 
    12361245         * The query flags are what page info WordPress was able to figure out. 
     
    14851494                                $this->is_date = true; 
    14861495                        } 
    14871496 
     1497                        $this->parsed_tax_query = false; 
    14881498                        $this->parse_tax_query( $qv ); 
    14891499 
    14901500                        foreach ( $this->tax_query->queries as $tax_query ) { 
     
    16711681                } 
    16721682 
    16731683                // Category stuff 
    1674                 if ( !empty($q['cat']) && '0' != $q['cat'] && !$this->is_singular ) { 
     1684                if ( !empty($q['cat']) && '0' != $q['cat'] && !$this->is_singular && !$this->parsed_tax_query ) { 
    16751685                        $q['cat'] = ''.urldecode($q['cat']).''; 
    16761686                        $q['cat'] = addslashes_gpc($q['cat']); 
    16771687                        $cat_array = preg_split('/[,\s]+/', $q['cat']); 
     
    16841694                                $cat = abs($cat); 
    16851695                                if ( $in ) { 
    16861696                                        $q['category__in'][] = $cat; 
     1697                                        $q['category__in'] = array_merge( $q['category__in'], get_term_children($cat, 'category') ); 
    16871698                                } else { 
    16881699                                        $q['category__not_in'][] = $cat; 
     1700                                        $q['category__not_in'] = array_merge( $q['category__not_in'], get_term_children($cat, 'category') ); 
    16891701                                } 
    16901702                        } 
    16911703                        $q['cat'] = implode(',', $req_cats); 
     
    16961708                        $tax_query[] = array( 
    16971709                                'taxonomy' => 'category', 
    16981710                                'terms' => $q['category__in'], 
    1699                                 'field' => 'term_id' 
     1711                                'field' => 'term_id', 
     1712                                'include_children' => false 
    17001713                        ); 
    17011714                } 
    17021715 
     
    17051718                        $tax_query[] = array( 
    17061719                                'taxonomy' => 'category', 
    17071720                                'terms' => $q['category__not_in'], 
    1708                                 'operator' => 'NOT IN' 
     1721                                'operator' => 'NOT IN', 
     1722                                'include_children' => false  
    17091723                        ); 
    17101724                } 
    17111725 
     
    17151729                                'taxonomy' => 'category', 
    17161730                                'terms' => $q['category__and'], 
    17171731                                'field' => 'term_id', 
    1718                                 'operator' => 'AND' 
     1732                                'operator' => 'AND', 
     1733                                'include_children' => false 
    17191734                        ); 
    17201735                } 
    17211736 
     
    17731788                        ); 
    17741789                } 
    17751790 
     1791                $this->parsed_tax_query = true; 
     1792 
    17761793                $this->tax_query = new WP_Tax_Query( $tax_query ); 
    17771794        } 
    17781795