WordPress.org

Make WordPress Core

Ticket #19705: better-tax-syntax.diff

File better-tax-syntax.diff, 2.6 KB (added by misterbisson, 8 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        }