is_object_in_term() WP 2.7.0

Визначає чи пов’язаний зазначений об’єкт з будь-яким із зазначених елементів таксономії (терміном). Можна вказати конкретний термін(и) для перевірки зв’язку.

Зазначені терміни порівнюються з ID, назвою та складом термінів об’єкта. Якщо передати терміни як числа, порівняння буде лише з ID термінів об’єкта. Якщо не вказати термін, то функція перевірить чи є об’єкт хоч один термін із зазначеної таксономії.

Працює на основі:
wp_get_object_terms() ,
get_object_term_cache()
Основа для:
has_term()
1 раз – 0.000809 сек
(повільно) | 50000 разів – 1.16 сек
(швидко) |
PHP 7.0.8, WP 4.6.1

Хуків немає.

Повертає

true|false|WP_Error. true, якщо об’єкт відноситься до терміна або false. Об’єкт WP_Error, якщо виникла помилка.

Використання

if( is_object_in_term( $object_id, $taxonomy, $terms ) ){
	...
}
$object_id
(число) (обов’язковий)
ID посту, зв’язок якого з терміном потрібно перевірити.
$taxonomy
(рядок) (обов’язковий)
Назва таксономії, до якої належить термін із параметра $terms.
$terms
(рядок/масив/число)
ID, назва або склад терміна. Можна вказати кілька термінів у масиві.


Типово: null

Приклади

0

#1 Перевірка наявності термінів об’єкта

Перевіримо, чи знаходиться поточний пост ($post->ID) у терміні “Мов” (yaziki або ID=5), таксономії ‘my_taxonomy’:

$is_in = is_object_in_term( $post->ID, 'my_taxonomy', 'yaziki' );
if ( $is_in )
	echo 'Піст знаходиться в терміні "Мов"";

// також можна вказати термін так
$is_in = is_object_in_term( $post->ID, 'my_taxonomy', 'Мови');
// або
$is_in = is_object_in_term( $post->ID, 'my_taxonomy', 5);
0

#2 Перевірка кількох термінів

$is_in = is_object_in_term( $post->ID, 'my_taxonomy', array('Мови', 25) );
if($is_in)
	echo 'Піст пов'язаний з одним із термінів: Мови', 25';

список змін

З версії 2.7.0Введено.

Код is_object_in_term() WP 6.0.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) {
			// Лише виконати numeric strings до term_id, 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;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *