WordPress.org

Make WordPress Core

Ticket #16152: 16152.diff

File 16152.diff, 2.2 KB (added by ryan, 7 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