get_the_terms() WP 2.5.0

Отримує елементи таксономії (терміни), які відносяться до зазначеного поста (запису).

Ця функція може бути використана всередині циклу WordPress. Або їй потрібно передати ID посту, елементи таксономії якого потрібно отримати.

Функція повністю ідентична get_the_terms .

Функція отримає лише терміни (елементи таксономії), які галочками позначені сторінці редагування записи.

Тобто. у такому разі функція отримає лише зазначені терміни.

Працює на основі:
wp_get_object_terms()
1 раз – 0.005139 сек
(дуже повільно) | 50000 разів – 1.66 сек
(швидко) |
PHP 7.1.2, WP 4.8

Хуки з функції
Array ( [0] => stdClass Object ( [term_id] => 21 [name] => Заміни плагінів [slug] => zamenyi-plaginam [term_group] => 0 [term_taxonomy_id] => 21 [taxonomy] => post_tag [description] => [parent] => 0 [count] => 8 [filter] => raw ) [1] => stdClass Object ( ... ) ... )

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

get_the_terms($post, $taxonomy);
$post
(число/WP_Post) (обов’язковий)
ID або об’єкт запису, терміни (елементи таксономії) якого потрібно отримати.
$taxonomy
(рядок) (обов’язковий)
Назву таксономії, терміни якої потрібно отримати.

Приклади

1

#1 Виведемо посилання на елементи таксономії ‘my_tax’, які стосуються посту 10

$ cur_terms = get_the_terms (10, 'my_tax');
if( is_array( $cur_terms ) ){
	foreach( $cur_terms as $cur_term ){
		echo '<a href="'. get_term_link( $cur_term->term_id, $cur_term->taxonomy ) .'">'. $cur_term->name .'</a>,';
	}
}

Те саме можна зробити всередині Цикл WordPress:

Для кожного посту будуть виведені пов’язані терміни (як позначки). Для цього вкажемо ID посту динамічно ( $post->ID ):

$cur_terms = get_the_terms( $post->ID, 'my_tax' );
if( is_array( $cur_terms ) ){
	foreach( $cur_terms as $cur_term ){
		echo '<a href="'. get_term_link( $cur_term->term_id, $cur_term->taxonomy ) .'">'. $cur_term->name .'</a>,';
	}
}
0

#2 Отримаємо лише перший термін

Допустимо, ми отримали терміни запису і нам потрібно взяти дані лише одного терміна (елемента таксономії). Але функція повертає масив об’єктів (термінів). Приклад нижче показує, як витягнути перший термін з масиву.

$terms = get_the_terms( $post->ID, 'my_tax' );
if( $terms ){
	$ term = array_shift ($ terms);

	// тепер можна вивести назву терміна
	echo $term->name;
}
0

#3 Отримує термін верхнього рівня для зазначеного або поточного посту в циклі

Це окрема функція з урахуванням get_the_terms()

/**
 * Отримує термін верхнього рівня для зазначеного або поточного посту в циклі.
 *
 * @param string $taxonomy Назва таксономії
 * @param int/object $post_id ID або об'єкт посту
 *
 * @return string/wp_error Об'єкт терміна або false
 */
function get_top_term( $taxonomy, $post_id = 0 ){

	isset( $post_id->ID ) && $post_id = $post_id->ID;
	! $post_id && $post_id = get_the_ID();

	$terms = get_the_terms($post_id, $taxonomy);

	if( ! $terms || is_wp_error( $terms ) ){
		return $terms;
	}

	// Тільки перший
	$ term = array_shift ($ terms);

	// Знайдемо ТОП
	$parent_id = $term->parent;
	while( $parent_id ){
		$term = get_term_by( 'id', $parent_id, $term->taxonomy );
		$parent_id = $term->parent;
	}

	return $term;
}

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

$top_term = get_top_term( 'category');
echo $top_term->name;

список змін

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

Код get_the_terms() WP 6.0.2

function get_the_terms( $post, $taxonomy ) {
	$post = get_post($post);
	if (! $post) {
		return false;
	}

	$terms = get_object_term_cache( $post->ID, $taxonomy );
	if ( false === $terms ) {
		$terms = wp_get_object_terms( $post->ID, $taxonomy );
		if ( ! is_wp_error( $terms ) ) {
			$term_ids = wp_list_pluck( $terms, 'term_id');
			wp_cache_add( $post->ID, $term_ids, $taxonomy . '_relationships' );
		}
	}

	/**
	 * Filters the list of terms attached to given post.
	 *
	 * @ Since 3.1.0
	 *
	 * @param WP_Term[]|WP_Error $terms array of attached terms, або WP_Error on failure.
	 * @param int $post_id Post ID.
	 * @param string $taxonomy Name of the taxonomy.
	 */
	$terms = apply_filters( 'get_the_terms', $terms, $post->ID, $taxonomy);

	if ( empty( $terms ) ) {
		return false;
	}

	return $terms;
}

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

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