Make WordPress Core

Ticket #15256: 15256.2.diff

File 15256.2.diff, 1.9 KB (added by dd32, 13 years ago)
  • wp-includes/query.php

     
    17301730                }
    17311731
    17321732                // Category stuff
    1733                 if ( !empty($q['cat']) && '0' != $q['cat'] && !$this->is_singular && $this->query_vars_changed ) {
    1734                         $q['cat'] = ''.urldecode($q['cat']).'';
    1735                         $q['cat'] = addslashes_gpc($q['cat']);
    1736                         $cat_array = preg_split('/[,\s]+/', $q['cat']);
    1737                         $q['cat'] = '';
    1738                         $req_cats = array();
    1739                         foreach ( (array) $cat_array as $cat ) {
    1740                                 $cat = intval($cat);
    1741                                 $req_cats[] = $cat;
    1742                                 $in = ($cat > 0);
    1743                                 $cat = abs($cat);
    1744                                 if ( $in ) {
    1745                                         $q['category__in'][] = $cat;
    1746                                         $q['category__in'] = array_merge( $q['category__in'], get_term_children($cat, 'category') );
    1747                                 } else {
    1748                                         $q['category__not_in'][] = $cat;
    1749                                         $q['category__not_in'] = array_merge( $q['category__not_in'], get_term_children($cat, 'category') );
    1750                                 }
     1733                if ( !empty($q['cat']) && !$this->is_singular ) {
     1734                        $cat_in = $cat_not_in = array();
     1735
     1736                        $cat_array = preg_split('/[,\s]+/', urldecode($q['cat']) );
     1737                        $cat_array = array_map('intval', $cat_array);
     1738                        $q['cat'] = implode(',', $cat_array);
     1739
     1740                        foreach ( $cat_array as $cat ) {
     1741                                if ( $cat > 0 )
     1742                                        $cat_in[] = $cat;
     1743                                elseif ( $cat < 0 )
     1744                                        $cat_not_in[] = abs($cat);
    17511745                        }
    1752                         $q['cat'] = implode(',', $req_cats);
     1746
     1747                        if ( !empty($cat_in) ) {
     1748                                $tax_query[] = array(
     1749                                        'taxonomy' => 'category',
     1750                                        'terms' => $cat_in,
     1751                                        'field' => 'term_id',
     1752                                        'include_children' => true
     1753                                );
     1754                        }
     1755
     1756                        if ( !empty($cat_not_in) ) {
     1757                                $tax_query[] = array(
     1758                                        'taxonomy' => 'category',
     1759                                        'terms' => $cat_not_in,
     1760                                        'field' => 'term_id',
     1761                                        'operator' => 'NOT IN',
     1762                                        'include_children' => true
     1763                                );
     1764                        }
     1765                        unset($cat_array, $cat_in, $cat_not_in);
    17531766                }
    17541767
    17551768                if ( !empty($q['category__in']) ) {