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_idsint|int[]required
The ID(s) of the object(s) to retrieve.
$taxonomiesstring|string[]required
The taxonomy names to retrieve terms from.
$argsarray|stringoptional
See WP_Term_Query::__construct() for supported arguments.

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

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 );	$defaults = array(	'update_term_meta_cache' => false,	);	$args = wp_parse_args( $args, $defaults );	/** * 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 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'] ) && str_starts_with( $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 * '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.

Changelog

VersionDescription
6.3.0Passing update_term_meta_cache argument value false by default resulting in get_terms() to not prime the term meta cache.
4.7.0Refactored to use WP_Term_Query, and to support any WP_Term_Query arguments.
4.4.0Introduced $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.0Added support for 'taxonomy', 'parent', and 'term_taxonomy_id' values of $orderby.
Introduced $parent argument.
2.3.0Introduced.

User Contributed Notes

  1. Skip to note 4 content

    It’s very important to note that if you wish to get the taxonomy terms for a given post, your first choice should be using get_the_terms() since it uses the WordPress object cache and can potentialy save a lot of extra queries.

    This is specially useful if you’re looping over posts results, because WP_Query by default loads all the terms for the queried posts.

  2. Skip to note 5 content

    Example

    Returns a list of all ‘product’ taxonomy terms that are applied to $post:

    $product_terms = wp_get_object_terms( $post->ID, 'product' ); if ( ! empty( $product_terms ) ) {	if ( ! is_wp_error( $product_terms ) ) {	echo '<ul>';	foreach( $product_terms as $term ) {	echo '<li><a href="' . esc_url( get_term_link( $term->slug, 'product' ) ) . '">' . esc_html( $term->name ) . '</a></li>';	}	echo '</ul>';	} }
  3. Skip to note 6 content

    Example of related EDD products

     $exclude_post_id = $post->ID; $taxchoice = 'download_tag'; $custom_taxterms = wp_get_object_terms( $post->ID, $taxchoice, array('fields' => 'ids') ); $arguments = array( 'post_type' => 'download', 'post_status' => 'publish', 'posts_per_page' => 3, 'orderby' => 'rand', 'ignore_sticky_posts' => 1, 'post__not_in' => array($post->ID, '81099'), 'ignore_sticky_posts'=>1, 'tax_query' => array( array( 'taxonomy' => $taxchoice, 'field' => 'id', 'terms' => $custom_taxterms ) ), ); $post_query = new WP_Query($arguments);

You must log in before being able to contribute a note or feedback.