Make WordPress Core

Opened 5 years ago

Last modified 7 months ago

#21760 closed enhancement

Allow get_term() to accept string as first argument — at Initial Version

Reported by: wonderboymusic Owned by:
Milestone: 4.8 Priority: normal
Severity: major Version: 2.3
Component: Taxonomy Keywords: has-patch has-unit-tests
Focuses: performance Cc:


get_term() is the simplest way to retrieve one term, but it requires term_id and taxonomy. Because of this, terms are cached with term_id as key and $taxonomy as bucket. As a result, you can't easily grab a term by slug, unless you use get_term_by( 'slug' ). get_term_by( 'slug' ) and get_term_by( 'name' ) don't even have a query cache, so they go to the database every time. Because you can't get a term by slug without hitting the db, every place you want to get a term by slug: you first have to transform it into a term_id where it will then be cached. This is inefficient because the user may query by slug constantly and never by term_id.

My patch does the following:

1) Changes the type of argument 1 of get_term to be mixed - int, string, or object
2) Allows key in the $taxonomy cache bucket to be name, slug, or term_id
3) Deprecates get_term_by()
4) updates clean_term_cache() to also evict by name and slug

The result is that get_term() can be called with term_id, slug, or name - and then CACHED by term_id, slug, or name.

Change History (1)

Note: See TracTickets for help on using tickets.