Opened 9 years ago
Closed 8 years ago
#20493 closed defect (bug) (invalid)
WP_Tax_Query->clean_query removes taxonomy term being searched for
Reported by: |
|
Owned by: | |
---|---|---|---|
Milestone: | Priority: | normal | |
Severity: | normal | Version: | |
Component: | Taxonomy | Keywords: | has-patch |
Focuses: | Cc: |
Description
When querying using a tax_query on a hierarchical taxonomy, WP_Tax_Query->clean_query() removes the term ID passed in.
So if I have a taxonomy which is structured like this:
Australia --Sydney ----East Sydney ----West Sydney ----Whatever else
And objects which are tagged with East, West, and then some are just Sydney.
Now in the parse_query filter we do something like this to include objects tagged as Sydney and its children:
$terms = $state->term_id; $tax_query[] = Array( 'taxonomy' => 'location', 'field' => 'id', 'terms' => Array($term) ); $wp_query->set("tax_query", $tax_query);
When clean_query runs through the query, it will remove the term_id for Sydney and replace it with the IDs for East Sydney, West Sydney, and the rest of Sydney's children. This results in any objects only tagged with Sydney not being returned by the query.
Changing line 736 of wp-includes/taxonomy.php from:
$query['terms'] = $children;
to:
$query['terms'] = array_merge($query['terms'], $children);
makes it behave as expected.
Attachments (2)
Change History (10)
#2
@
9 years ago
- Keywords needs-patch added
- Milestone changed from Awaiting Review to Future Release
Yep, it's a bug. Care to upload the patch?
#3
@
8 years ago
- Component changed from General to Taxonomy
- Keywords has-patch added; needs-patch removed
Patched.
Or.... I could be in the wrong place entirely :)