wordpress / latest / functions / wp_get_object_terms.html

wp_get_object_terms( int|int[] $object_ids, string|string[] $taxonomies, array|string $args = array() ): WP_Term[]|int[]|string[]|string|WP_Error

Retrieves the terms associated with the given object(s), in the supplied taxonomies.

Parameters

$object_ids int|int[] Required
The ID(s) of the object(s) to retrieve.
$taxonomies string|string[] Required
The taxonomy names to retrieve terms from.
$args array|string Optional
See WP_Term_Query::__construct() for supported arguments.
More Arguments from WP_Term_Query::__construct( ... $query ) Array or query string of term query parameters.
  • taxonomystring|string[]
    Taxonomy name, or array of taxonomy names, to which results should be limited.
  • object_idsint|int[]
    Object ID, or array of object IDs. Results will be limited to terms associated with these objects.
  • orderbystring
    Field(s) to order terms by. Accepts:
    • Term fields ('name', 'slug', 'term_group', 'term_id', 'id', 'description', 'parent', 'term_order'). Unless $object_ids is not empty, 'term_order' is treated the same as 'term_id'.
    • 'count' to use the number of objects associated with the term.
    • 'include' to match the 'order' of the $include param.
    • 'slug__in' to match the 'order' of the $slug param.
    • 'meta_value'
    • 'meta_value_num'.
    • The value of $meta_key.
    • The array keys of $meta_query.
    • 'none' to omit the ORDER BY clause.
    Default 'name'.
  • orderstring
    Whether to order terms in ascending or descending order.
    Accepts 'ASC' (ascending) or 'DESC' (descending).
    Default 'ASC'.
  • hide_emptybool|int
    Whether to hide terms not assigned to any posts. Accepts 1|true or 0|false. Default 1|true.
  • includeint[]|string
    Array or comma/space-separated string of term IDs to include.
    Default empty array.
  • excludeint[]|string
    Array or comma/space-separated string of term IDs to exclude.
    If $include is non-empty, $exclude is ignored.
    Default empty array.
  • exclude_treeint[]|string
    Array or comma/space-separated string of term IDs to exclude along with all of their descendant terms. If $include is non-empty, $exclude_tree is ignored. Default empty array.
  • numberint|string
    Maximum number of terms to return. Accepts ''|0 (all) or any positive number. Default ''|0 (all). Note that $number may not return accurate results when coupled with $object_ids.
    See #41796 for details.
  • offsetint
    The number by which to offset the terms query.
  • fieldsstring
    Term fields to query for. Accepts:
    • 'all' Returns an array of complete term objects (WP_Term[]).
    • 'all_with_object_id' Returns an array of term objects with the 'object_id' param (WP_Term[]). Works only when the $object_ids parameter is populated.
    • 'ids' Returns an array of term IDs (int[]).
    • 'tt_ids' Returns an array of term taxonomy IDs (int[]).
    • 'names' Returns an array of term names (string[]).
    • 'slugs' Returns an array of term slugs (string[]).
    • 'count' Returns the number of matching terms (int).
    • 'id=>parent' Returns an associative array of parent term IDs, keyed by term ID (int[]).
    • 'id=>name' Returns an associative array of term names, keyed by term ID (string[]).
    • 'id=>slug' Returns an associative array of term slugs, keyed by term ID (string[]).
    Default 'all'.
  • countbool
    Whether to return a term count. If true, will take precedence over $fields. Default false.
  • namestring|string[]
    Name or array of names to return term(s) for.
  • slugstring|string[]
    Slug or array of slugs to return term(s) for.
  • term_taxonomy_idint|int[]
    Term taxonomy ID, or array of term taxonomy IDs, to match when querying terms.
  • hierarchicalbool
    Whether to include terms that have non-empty descendants (even if $hide_empty is set to true). Default true.
  • searchstring
    Search criteria to match terms. Will be SQL-formatted with wildcards before and after.
  • name__likestring
    Retrieve terms with criteria by which a term is LIKE $name__like.
  • description__likestring
    Retrieve terms where the description is LIKE $description__like.
  • pad_countsbool
    Whether to pad the quantity of a term's children in the quantity of each term's "count" object variable. Default false.
  • getstring
    Whether to return terms regardless of ancestry or whether the terms are empty. Accepts 'all' or '' (disabled). Default ''.
  • child_ofint
    Term ID to retrieve child terms of. If multiple taxonomies are passed, $child_of is ignored. Default 0.
  • parentint
    Parent term ID to retrieve direct-child terms of.
  • childlessbool
    True to limit results to terms that have no children.
    This parameter has no effect on non-hierarchical taxonomies.
    Default false.
  • cache_domainstring
    Unique cache key to be produced when this query is stored in an object cache. Default 'core'.
  • update_term_meta_cachebool
    Whether to prime meta caches for matched terms. Default true.
  • meta_keystring|string[]
    Meta key or keys to filter by.
  • meta_valuestring|string[]
    Meta value or values to filter by.
  • meta_comparestring
    MySQL operator used for comparing the meta value.
    See WP_Meta_Query::__construct() for accepted values and default value.
  • meta_compare_keystring
    MySQL operator used for comparing the meta key.
    See WP_Meta_Query::__construct() for accepted values and default value.
  • meta_typestring
    MySQL data type that the meta_value column will be CAST to for comparisons.
    See WP_Meta_Query::__construct() for accepted values and default value.
  • meta_type_keystring
    MySQL data type that the meta_key column will be CAST to for comparisons.
    See WP_Meta_Query::__construct() for accepted values and default value.
  • meta_queryarray
    An associative array of WP_Meta_Query arguments.
    See WP_Meta_Query::__construct() for accepted values.

Default: array()

Return

WP_Term[]|int[]|string[]|string|WP_Error Array of terms, a count thereof as a numeric string, or WP_Error if any of the taxonomies do not exist.
See WP_Term_Query::get_terms() for more information.

More Information

It should be noted that the results from wp_get_object_terms are not cached which will result in a db call everytime this function is called. For performance, functions like get_the_terms() (which the results of has been cached), should be used.

Source

File: wp-includes/taxonomy.php. View all references

function wp_get_object_terms( $object_ids, $taxonomies, $args = array() ) {
	if ( empty( $object_ids ) || empty( $taxonomies ) ) {
		return array();
	}

	if ( ! is_array( $taxonomies ) ) {
		$taxonomies = array( $taxonomies );
	}

	foreach ( $taxonomies as $taxonomy ) {
		if ( ! taxonomy_exists( $taxonomy ) ) {
			return new WP_Error( 'invalid_taxonomy', __( 'Invalid taxonomy.' ) );
		}
	}

	if ( ! is_array( $object_ids ) ) {
		$object_ids = array( $object_ids );
	}
	$object_ids = array_map( 'intval', $object_ids );

	$args = wp_parse_args( $args );

	/**
	 * Filters arguments for retrieving object terms.
	 *
	 * @since 4.9.0
	 *
	 * @param array    $args       An array of arguments for retrieving terms for the given object(s).
	 *                             See {@see wp_get_object_terms()} for details.
	 * @param int[]    $object_ids Array of object IDs.
	 * @param string[] $taxonomies Array of taxonomy names to retrieve terms from.
	 */
	$args = apply_filters( 'wp_get_object_terms_args', $args, $object_ids, $taxonomies );

	/*
	 * When one or more queried taxonomies is registered with an 'args' array,
	 * those params override the `$args` passed to this function.
	 */
	$terms = array();
	if ( count( $taxonomies ) > 1 ) {
		foreach ( $taxonomies as $index => $taxonomy ) {
			$t = get_taxonomy( $taxonomy );
			if ( isset( $t->args ) && is_array( $t->args ) && array_merge( $args, $t->args ) != $args ) {
				unset( $taxonomies[ $index ] );
				$terms = array_merge( $terms, wp_get_object_terms( $object_ids, $taxonomy, array_merge( $args, $t->args ) ) );
			}
		}
	} else {
		$t = get_taxonomy( $taxonomies[0] );
		if ( isset( $t->args ) && is_array( $t->args ) ) {
			$args = array_merge( $args, $t->args );
		}
	}

	$args['taxonomy']   = $taxonomies;
	$args['object_ids'] = $object_ids;

	// Taxonomies registered without an 'args' param are handled here.
	if ( ! empty( $taxonomies ) ) {
		$terms_from_remaining_taxonomies = get_terms( $args );

		// Array keys should be preserved for values of $fields that use term_id for keys.
		if ( ! empty( $args['fields'] ) && 0 === strpos( $args['fields'], 'id=>' ) ) {
			$terms = $terms + $terms_from_remaining_taxonomies;
		} else {
			$terms = array_merge( $terms, $terms_from_remaining_taxonomies );
		}
	}

	/**
	 * Filters the terms for a given object or objects.
	 *
	 * @since 4.2.0
	 *
	 * @param WP_Term[]|int[]|string[]|string $terms      Array of terms or a count thereof as a numeric string.
	 * @param int[]                           $object_ids Array of object IDs for which terms were retrieved.
	 * @param string[]                        $taxonomies Array of taxonomy names from which terms were retrieved.
	 * @param array                           $args       Array of arguments for retrieving terms for the given
	 *                                                    object(s). See wp_get_object_terms() for details.
	 */
	$terms = apply_filters( 'get_object_terms', $terms, $object_ids, $taxonomies, $args );

	$object_ids = implode( ',', $object_ids );
	$taxonomies = "'" . implode( "', '", array_map( 'esc_sql', $taxonomies ) ) . "'";

	/**
	 * Filters the terms for a given object or objects.
	 *
	 * The `$taxonomies` parameter passed to this filter is formatted as a SQL fragment. The
	 * {@see 'get_object_terms'} filter is recommended as an alternative.
	 *
	 * @since 2.8.0
	 *
	 * @param WP_Term[]|int[]|string[]|string $terms      Array of terms or a count thereof as a numeric string.
	 * @param string                          $object_ids Comma separated list of object IDs for which terms were retrieved.
	 * @param string                          $taxonomies SQL fragment of taxonomy names from which terms were retrieved.
	 * @param array                           $args       Array of arguments for retrieving terms for the given
	 *                                                    object(s). See wp_get_object_terms() for details.
	 */
	return apply_filters( 'wp_get_object_terms', $terms, $object_ids, $taxonomies, $args );
}

Hooks

apply_filters( 'get_object_terms', WP_Term[]|int[]|string[]|string $terms, int[] $object_ids, string[] $taxonomies, array $args )

Filters the terms for a given object or objects.

apply_filters( 'wp_get_object_terms', WP_Term[]|int[]|string[]|string $terms, string $object_ids, string $taxonomies, array $args )

Filters the terms for a given object or objects.

apply_filters( 'wp_get_object_terms_args', array $args, int[] $object_ids, string[] $taxonomies )

Filters arguments for retrieving object terms.

Uses

Uses Description

Used By

Used By Description

Changelog

Version Description
4.7.0 Refactored to use WP_Term_Query, and to support any WP_Term_Query arguments.
4.4.0 Introduced $meta_query and $update_term_meta_cache arguments. When $fields is 'all' or 'all_with_object_id', an array of WP_Term objects will be returned.
4.2.0 Added support for 'taxonomy', 'parent', and 'term_taxonomy_id' values of $orderby.
Introduced $parent argument.
2.3.0 Introduced.

© 2003–2022 WordPress Foundation
Licensed under the GNU GPLv2+ License.
https://developer.wordpress.org/reference/functions/wp_get_object_terms