wp_get_object_terms( int|array $object_ids, string|array $taxonomies, array|string $args = array() )

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


Description Description


Parameters Parameters

$object_ids

(int|array) (Required) The ID(s) of the object(s) to retrieve.

$taxonomies

(string|array) (Required) The taxonomies to retrieve terms from.

$args

(array|string) (Optional) See WP_Term_Query::__construct() for supported arguments.

Default value: array()


Top ↑

Return Return

(array|WP_Error) The requested term data or empty array if no terms found. WP_Error if any of the $taxonomies don't exist.


Top ↑

Source Source

File: wp-includes/taxonomy.php

function wp_get_object_terms($object_ids, $taxonomies, $args = array()) {
	global $wpdb;

	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 );

	/*
	 * 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 ) && $args != array_merge( $args, $t->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;

	$terms = array_merge( $terms, get_terms( $args ) );

	/**
	 * Filters the terms for a given object or objects.
	 *
	 * @since 4.2.0
	 *
	 * @param array $terms      An array of terms for the given object or objects.
	 * @param array $object_ids Array of object IDs for which `$terms` were retrieved.
	 * @param array $taxonomies Array of taxonomies from which `$terms` were retrieved.
	 * @param array $args       An 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 array     $terms      An array of terms for the given object or objects.
	 * @param int|array $object_ids Object ID or array of IDs.
	 * @param string    $taxonomies SQL-formatted (comma-separated and quoted) list of taxonomy names.
	 * @param array     $args       An 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 );
}

Top ↑

Changelog Changelog

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.


Top ↑

User Contributed Notes User Contributed Notes

  1. Skip to note content
    Contributed by Codex

    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>';
    	}
    }
    
  2. Skip to note content
    Contributed by Felipe Lavín

    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.

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