WordPress.org

Make WordPress Core

Ticket #19705: better-tax-syntax.diff

File better-tax-syntax.diff, 2.6 KB (added by misterbisson, 2 years ago)
  • wp-includes/query.php

     
    16991699                } 
    17001700 
    17011701                foreach ( $GLOBALS['wp_taxonomies'] as $taxonomy => $t ) { 
    1702                         if ( 'post_tag' == $taxonomy ) 
    1703                                 continue;       // Handled further down in the $q['tag'] block 
     1702//                      if ( 'post_tag' == $taxonomy ) 
     1703//                              continue;       // Handled further down in the $q['tag'] block 
    17041704 
    17051705                        if ( $t->query_var && !empty( $q[$t->query_var] ) ) { 
    17061706                                $tax_query_defaults = array( 
     
    17141714 
    17151715                                $term = $q[$t->query_var]; 
    17161716 
    1717                                 if ( strpos($term, '+') !== false ) { 
    1718                                         $terms = preg_split( '/[+]+/', $term ); 
    1719                                         foreach ( $terms as $term ) { 
    1720                                                 $tax_query[] = array_merge( $tax_query_defaults, array( 
    1721                                                         'terms' => array( $term ) 
    1722                                                 ) ); 
    1723                                         } 
    1724                                 } else { 
     1717                                // determine the logical operator for each term 
     1718                                $term_in_array = $term_and_array = $term_not_in_array = array(); 
     1719                                foreach( (array) preg_split( '/[,]+/', $term ) as $partial ) 
     1720                                { 
     1721                                        switch( $partial{0} ) 
     1722                                        { 
     1723                                                case '+': // the term is required 
     1724                                                        $term_and_array[] = substr( $partial , 1 ); 
     1725                                                        break; 
     1726 
     1727                                                case '-': // the term is excluded 
     1728                                                        $term_not_in_array[] = substr( $partial , 1 ); 
     1729                                                        break; 
     1730 
     1731                                                default:  
     1732                                                        if ( strpos( $partial, '+' ) !== false ) // handle old-style AND syntax 
     1733                                                        { 
     1734                                                                $terms = preg_split( '/[+]+/', $partial ); 
     1735                                                                foreach ( $terms as $partial ) 
     1736                                                                        $term_and_array[] = $partial; 
     1737                                                        } else { 
     1738                                                                $term_in_array[] = $partial; 
     1739                                                        } 
     1740                                        } // end switch $partial{0} 
     1741                                } 
     1742 
     1743                                // add the above terms to the query array 
     1744                                if( ! empty( $term_and_array )) 
     1745                                { 
    17251746                                        $tax_query[] = array_merge( $tax_query_defaults, array( 
    1726                                                 'terms' => preg_split( '/[,]+/', $term ) 
    1727                                         ) ); 
     1747                                                'terms' => $term_and_array, 
     1748                                                'operator' => 'AND', 
     1749                                        )); 
    17281750                                } 
     1751 
     1752                                if( ! empty( $term_not_in_array )) 
     1753                                { 
     1754                                        $tax_query[] = array_merge( $tax_query_defaults, array( 
     1755                                                'terms' => $term_not_in_array, 
     1756                                                'operator' => 'NOT IN', 
     1757                                        )); 
     1758                                } 
     1759 
     1760                                if( ! empty( $term_in_array )) 
     1761                                { 
     1762                                        $tax_query[] = array_merge( $tax_query_defaults, array( 
     1763                                                'terms' => $term_in_array, 
     1764                                                'operator' => 'IN', 
     1765                                        )); 
     1766                                } 
     1767 
    17291768                        } 
    17301769                } 
    17311770 
     
    17821821                                'include_children' => false 
    17831822                        ); 
    17841823                } 
    1785  
     1824/* 
    17861825                // Tag stuff 
    17871826                if ( '' != $q['tag'] && !$this->is_singular && $this->query_vars_changed ) { 
    17881827                        if ( strpos($q['tag'], ',') !== false ) { 
     
    18551894                                'operator' => 'AND' 
    18561895                        ); 
    18571896                } 
     1897*/ 
    18581898 
    18591899                $this->tax_query = new WP_Tax_Query( $tax_query ); 
    18601900        }