is_object_in_term()WP 2.7.0

Determine if the given object is associated with any of the given terms.

The given terms are checked against the object's terms' term_ids, names and slugs. Terms given as integers will only be checked against the object's terms' term_ids. If no terms are given, determines if object is associated with any terms in the given taxonomy.

Used By: has_term()
1 time — 0.000809 sec (slow) | 50000 times — 1.16 sec (fast) | PHP 7.0.8, WP 4.6.1

No Hooks.

Return

true|false|WP_Error. WP_Error on input error.

Usage

is_object_in_term( $object_id, $taxonomy, $terms );
$object_id(int) (required)
ID of the object (post ID, link ID, ...).
$taxonomy(string) (required)
Single taxonomy name.
$terms(int|string|int[]|string[])
Term ID, name, slug, or array of such to check against.
Default: null

Examples

0

#1 Checking if there are terms for the object (post)

Let's check if the current post ($post->ID) is in the term 'Languages' (slug=langs or ID=5), taxonomy 'my_taxonomy':

$is_in = is_object_in_term( $post->ID, 'my_taxonomy', 'langs' );

if ( $is_in ) {
	echo 'The post is in the term Languages';
}

// it is also possible to specify the term name (not slug)
$is_in = is_object_in_term( $post->ID, 'my_taxonomy', 'Languages' );

// or ID
$is_in = is_object_in_term( $post->ID, 'my_taxonomy', 5 );
0

#2 Multiple term check

$is_in = is_object_in_term( $post->ID, 'my_taxonomy', [ 'Languages', 25 ] );

if( $is_in ){
	echo 'The post is related to one of the terms: Languages', 25';
}

Changelog

Since 2.7.0 Introduced.

is_object_in_term() code WP 6.6.2

function is_object_in_term( $object_id, $taxonomy, $terms = null ) {
	$object_id = (int) $object_id;
	if ( ! $object_id ) {
		return new WP_Error( 'invalid_object', __( 'Invalid object ID.' ) );
	}

	$object_terms = get_object_term_cache( $object_id, $taxonomy );
	if ( false === $object_terms ) {
		$object_terms = wp_get_object_terms( $object_id, $taxonomy, array( 'update_term_meta_cache' => false ) );
		if ( is_wp_error( $object_terms ) ) {
			return $object_terms;
		}

		wp_cache_set( $object_id, wp_list_pluck( $object_terms, 'term_id' ), "{$taxonomy}_relationships" );
	}

	if ( is_wp_error( $object_terms ) ) {
		return $object_terms;
	}
	if ( empty( $object_terms ) ) {
		return false;
	}
	if ( empty( $terms ) ) {
		return ( ! empty( $object_terms ) );
	}

	$terms = (array) $terms;

	$ints = array_filter( $terms, 'is_int' );
	if ( $ints ) {
		$strs = array_diff( $terms, $ints );
	} else {
		$strs =& $terms;
	}

	foreach ( $object_terms as $object_term ) {
		// If term is an int, check against term_ids only.
		if ( $ints && in_array( $object_term->term_id, $ints, true ) ) {
			return true;
		}

		if ( $strs ) {
			// Only check numeric strings against term_id, to avoid false matches due to type juggling.
			$numeric_strs = array_map( 'intval', array_filter( $strs, 'is_numeric' ) );
			if ( in_array( $object_term->term_id, $numeric_strs, true ) ) {
				return true;
			}

			if ( in_array( $object_term->name, $strs, true ) ) {
				return true;
			}
			if ( in_array( $object_term->slug, $strs, true ) ) {
				return true;
			}
		}
	}

	return false;
}