Make WordPress Core

Opened 17 years ago

Closed 16 years ago

Last modified 15 years ago

#11076 closed enhancement (fixed)

Allow 'include' & 'exclude' args to be arrays

Reported by: scribu Owned by: scribu
Priority: normal Milestone: 3.0
Component: General Version:
Severity: normal Keywords: has-patch commit
Cc: Focuses:

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)

get_terms.diff​ (862 bytes ) - added by scribu 17 years ago.
get_terms.2.diff​ (864 bytes ) - added by scribu 17 years ago.
Fix copy-paste error
get_terms.3.diff​ (4.6 KB ) - added by scribu 17 years ago.
Use helper function
get_terms.4.diff​ (5.0 KB ) - added by scribu 17 years ago.
Rename helper function to wp_parse_id_list()
post.php.diff​ (2.8 KB ) - added by scribu 17 years ago.
Use wp_parse_id_list() in get_posts() and get_pages()

Download all attachments as: .zip

Change History (21)

@scribu
17 years ago

#1 @ryan
17 years ago

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

#2 @ryan
17 years ago

  • Milestone 2.9 → 3.0

@scribu
17 years ago

Fix copy-paste error

#3 @scribu
17 years ago

  • Keywords commit added; tested removed

#4 @westi
17 years ago

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.

#5 @scribu
17 years ago

​get_terms.3.diff creates a helper function called _parse_get_terms_arg() and applies it to exclude, exclude_tree and include.

@scribu
17 years ago

Use helper function

@scribu
17 years ago

Rename helper function to wp_parse_id_list()

#6 @scribu
17 years ago

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.

#7 @westi
17 years ago

  • Resolution → fixed
  • Status new → closed

(In [12658]) Add support to get_terms() to allow 'include' & 'exclude' args to be arrays(). Fixes #11076 props scribu.

#8 @sirzooro
17 years ago

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, ...)

#9 @scribu
17 years ago

+1 on that. Please open a new ticket.

#10 @scribu
17 years ago

  • Keywords needs-patch added; has-patch commit removed
  • Resolution fixed
  • Status closed → reopened
  • Summary In get_terms(), allow 'include' & 'exclude' args to be arrays → Allow 'include' & 'exclude' args to be arrays

Should also do this for get_pages() and get_posts()

#11 @scribu
17 years ago

  • Component Taxonomy → General

@scribu
17 years ago

Use wp_parse_id_list() in get_posts() and get_pages()

#12 @scribu
17 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(...) )

#13 @scribu
17 years ago

  • Owner changed from filosofo to scribu
  • Status reopened → accepted

#14 @nacin
16 years ago

  • Resolution → fixed
  • Status accepted → closed

(In [14133]) Allow include/exclude args to be arrays in get_posts() and get_pages(). Utilizes wp_parse_id_list(). props scribu, fixes #11076.

#15 @miqrogroove
15 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.

#16 @miqrogroove
15 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)
}
Note: See TracTickets for help on using tickets.