Retrieve the terms in a given taxonomy or list of taxonomies.

You can fully inject any customizations to the query before it is sent, as well as control the output with a filter.

The {@see ‘get_terms’} filter will be called when the cache has the term and will pass the found term along with the array of $taxonomies and array of $args. This filter is also called before the array of terms is passed and will pass the array of terms, along with the $taxonomies and $args.

The {@see ‘list_terms_exclusions’} filter passes the compiled exclusions along with the $args.

The {@see ‘get_terms_orderby’} filter passes the `ORDER BY` clause for the query along with the $args array.

Prior to 4.5.0, the first parameter of `get_terms()` was a taxonomy or list of taxonomies:

$terms = get_terms( ‘post_tag’, array( ‘hide_empty’ => false, ) );

Since 4.5.0, taxonomies should be passed via the ‘taxonomy’ argument in the `$args` array:

$terms = get_terms( array( ‘taxonomy’ => ‘post_tag’, ‘hide_empty’ => false, ) );


get_terms( $args = array(), $deprecated = '' )
 (string|array) Optional. Array or string of arguments. See WP_Term_Query::__construct() for information on accepted arguments. Default empty.
Default: array()
 (array) Argument array, when using the legacy function parameter format. If present, this parameter will be interpreted as `$args`, and the first function parameter will be parsed as a taxonomy or array of taxonomies.
Default: ''


(array|int|WP_Error) List of WP_Term instances and their children. Will return WP_Error, if any of $taxonomies do not exist.


function get_terms( $args = array(), $deprecated = '' ) {
	$term_query = new WP_Term_Query();

	$defaults = array(
		'suppress_filter' => false,

	 * Legacy argument format ($taxonomy, $args) takes precedence.
	 * We detect legacy argument format by checking if
	 * (a) a second non-empty parameter is passed, or
	 * (b) the first parameter shares no keys with the default array (ie, it's a list of taxonomies)
	$_args = wp_parse_args( $args );
	$key_intersect  = array_intersect_key( $term_query->query_var_defaults, (array) $_args );
	$do_legacy_args = $deprecated || empty( $key_intersect );

	if ( $do_legacy_args ) {
		$taxonomies = (array) $args;
45 more lines...
WP Trac GitHub

Link here