#11076 closed enhancement (fixed)
Allow 'include' & 'exclude' args to be arrays
| Reported by: |
|
Owned by: |
|
|---|---|---|---|
| Priority: | normal | Milestone: | 3.0 |
| Component: | General | Version: | |
| Severity: | normal | Keywords: | has-patch commit |
| Cc: |
Description
Most of the time, the term ids you want to include are retrieved as an array, using $wpdb.
To avoid having to join(',', $term_ids), only to have them preg_split() afterwards, I think this would be really useful.
Attachments (5)
Change History (21)
Looks like we should also do this for $exclude_tree and we should probably set the default values at the top of the function to array() instead of '' so we can avoid the preg_split.
Wondering if we should refactor some of this code into a helper function as we have a lot of copy/paste going on here.
get_terms.3.diff creates a helper function called _parse_get_terms_arg() and applies it to exclude, exclude_tree and include.
get_terms.4.diff moves the helper function wp_parse_id_list() to wp-includes/functions.php so that it can be used in other contexts.
- Resolution set to fixed
- Status changed from new to closed
I think it will be better to change generated SQL from:
AND (t.term_id = 1 OR t.term_id = 2 OR ...) AND (t.term_id <> 1 AND t.term_id <> 2 AND ...)
to:
AND t.term_id IN (1, 2, ...) AND t.term_id NOT IN (1, 2, ...)
comment:10
scribu — 3 years ago
- Keywords needs-patch added; has-patch commit removed
- Resolution fixed deleted
- Status changed from closed to reopened
- Summary changed from In get_terms(), allow 'include' & 'exclude' args to be arrays to Allow 'include' & 'exclude' args to be arrays
Should also do this for get_pages() and get_posts()
comment:11
scribu — 3 years ago
- Component changed from Taxonomy to General
comment:12
scribu — 3 years ago
- Keywords has-patch commit added; needs-patch removed
post.php.diff:
- use wp_parse_id_list() in get_posts() and get_pages()
- replace if ( count(...) ) with if ( !empty(...) )
comment:13
scribu — 3 years ago
- Owner changed from filosofo to scribu
- Status changed from reopened to accepted
comment:14
nacin — 3 years ago
- Resolution set to fixed
- Status changed from accepted to closed
comment:15
miqrogroove — 2 years ago
I'm trying to figure out if something blew up here. In version 2.9 this was working fine:
$ids = implode(',', $ids);
$taxonomy = 'post_tag';
$args = array('include' => $ids);
$terms = get_terms($taxonomy, $args);
In version 3.0, get_terms is returning an empty array :( I'm working on a plugin upgrade that needs to be backward compatible, so I'm hoping this change doesn't mean CSVs are invalid now.
comment:16
miqrogroove — 2 years ago
Nevermind, it works fine. The tags I was testing were attached to drafts so they were coming up empty. Inputs handled as expected:
var_dump(wp_parse_id_list('16'));
array(1) {
[0]=>
int(16)
}

Looks like a cut-and-paste error. Second $include should be $exclude.