WordPress.org

Make WordPress Core

Ticket #9951: query.diff.txt

File query.diff.txt, 2.5 KB (added by joehoyle, 10 years ago)

Patch to allow [custom taxonomy]in in wp_query

Line 
11399,1415d1398
2<                       //Custom Taxonomies
3<                       foreach( $qv as $var => $value ) {
4<                               if( ( $pos = strpos( $var, '__in' ) ) && $var != 'tag__in' && $var != 'category__in' && $var != 'post__in' && $var != 'tag_slug__in' ) {
5<                                       $custom_taxonomies[ $var ] = substr( $var, 0, $pos );
6<                               }
7<                               elseif( ( $pos = strpos( $var, '__not_in' ) ) && $var != 'tag__not_in' && $var != 'category__not_in' && $var != 'post__not_in' ) {
8<                                       (array) $this->custom_taxonomies__not_in[ $var ] = substr( $var, 0, $pos );
9<                               }
10<                       }
11<                       
12<                       foreach( (array) $custom_taxonomies as $var => $custom_tax ) {
13<                               $item = 'is_' . $custom_tax;
14<                               $this->$item = true;
15<                               (array) $qv[$var];
16<                       }
17<                       $this->custom_taxonomies = (array) $custom_taxonomies;
18<
191922,1940c1905
20<               //Custom Taxonomies
21<               foreach( (array) $this->custom_taxonomies as $var => $custom_tax ) {
22<                       $join = " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) ";
23<                       $reqtag = is_term( $q[$var][0], $custom_tax );
24<                       $distinct = 'DISTINCT';
25<               }
26<               
27<               //Custom Taxonomy Not In
28<               foreach( (array) $this->custom_taxonomies__not_in as $var => $custom_tax ) {
29<                       if ( $wpdb->has_cap( 'subqueries' ) ) {
30<                               $tax_string = "'" . implode("', '", $q[$var]) . "'";
31<                               $whichcat .= " AND $wpdb->posts.ID NOT IN ( SELECT tr.object_id FROM $wpdb->term_relationships AS tr INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy = '$custom_tax' AND tt.term_id IN ($tax_string) )";
32<                       } else {
33<                               $ids = get_objects_in_term($q[$var], $custom_tax);
34<                               if ( !is_wp_error($ids) && is_array($ids) && count($ids) > 0 )
35<                                       $whichcat .= " AND $wpdb->posts.ID NOT IN ('" . implode("', '", $ids) . "')";
36<                       }
37<               }
38<
39<               // Tag and slug intersections. Also merge with custom taxonomies
40---
41>               // Tag and slug intersections.
421942d1906
43<               $intersections = array_merge( $intersections, (array) $this->custom_taxonomies );
441945a1910
45>                       if ( in_array($item, $tagin) && empty($q['cat']) ) continue; // We should already have what we need if categories aren't being used
461953c1918
47<                       $taxonomy_field = $item != ('tag_slug__and' || 'tag_slug__in') ? 'slug' : 'term_id';
48---
49>                       $taxonomy_field = $item == ('tag_slug__and' || 'tag_slug__in') ? 'slug' : 'term_id';