is_object_in_term
Determine if the given object is associated with any of the given terms.
Description
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.
Returns (bool|WP_Error)
WP_Error on input error.
Parameters (3)
- 0. $object_id (int)
- ID of the object (post ID, link ID, ...).
- 1. $taxonomy (string)
- Single taxonomy name.
- 2. $terms — Optional. (null) =>
null
- Term term_id, name, slug or array of said. Default null.
Usage
if ( !function_exists( 'is_object_in_term' ) ) { require_once ABSPATH . WPINC . '/taxonomy.php'; } // ID of the object (post ID, link ID, ...). $object_id = -1; // Single taxonomy name. $taxonomy = ''; // Optional. Term term_id, name, slug or array of said. Default null. $terms = null; // NOTICE! Understand what this does before running. $result = is_object_in_term($object_id, $taxonomy, $terms);
Defined (1)
The function is defined in the following location(s).
- /wp-includes/taxonomy.php
- function is_object_in_term( $object_id, $taxonomy, $terms = null ) {
- if ( !$object_id = (int) $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;
- if ( $ints = array_filter( $terms, 'is_int' ) )
- $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 ) ) {
- 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 ) ) return true;
- if ( in_array( $object_term->slug, $strs ) ) return true;
- }
- }
- return false;
- }