get_term_by() WP 2.3.0

Отримує зазначений термін (елемент таксономії) за: ім’ям (назвою), ярликом (слагою) або за ID терміном.

Важливо: $value не очищається, коли $field=nameвам потрібно робити це самостійно.

Функція завжди повертає перший термін, що підходить під умови: $field, $value, $taxonomy. Але коли $field=name, то може бути кілька термінів з однаковими назвами, у такому випадку функція поверне лише перший знайдений термін, якщо потрібні всі знайдені, використовуйте get_terms() .

Використовує: sanitize_term() — чистить елемент на основі правил фільтра, вказаного в параметрі $filter .

Працює на основі:
get_terms() ,
get_term()
1 раз – 0.001272 сек
(дуже повільно) | 50000 разів – 4.95 сек
(швидко) |
PHP 7.1.11, WP 4.9.6

Хуків немає.

Повертає

WP_Term|Массив|false.

  • WP_Term|Массив— Рядок бази даних у зазначеному форматі (масив/об’єкт). Масив або об’єкт будуть містити такі дані:

    stdClass Object (
    	[term_id] => 9
    	[name] => Адмінка
    	[slug] => adminka-wordpress
    	[term_group] => 0
    	[term_taxonomy_id] => 9
    	[taxonomy] => category
    	[description] =>
    	[parent] => 3
    	[count] => 3
    	[filter] => raw
    )

    Попередження: всі поля масиву повертаються як рядки, term_id у тому числі. Тому перед подальшим використанням перетворіть числові значення на числа, де це необхідно.

  • falseколи таксономії не існує або термін не знайдений у ній.

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

get_term_by($field, $value, $taxonomy, $output, $filter);
$field
(рядок) (обов’язковий)

Поле в БД, яким буде здійснюватися пошук параметра $value , можливо:

  • slug– за альтернативною назвою.
  • name– За назвою.
  • term_taxonomy_id– за ідентифікатором таксономії терміна.
  • id– за ідентифікатором терміна. C WP 5.5 можна ключ може бути і ID.
$value
(рядок/число) (обов’язковий)
Значення, яке потрібно знайти.
$taxonomy
(рядок) (обов’язковий)

Назва таксономії, category , post_tag або назва довільної таксономії.

З версії 4.4. цей параметр не є обов’язковим, якщо в $field вказано term_taxonomy_id.

$output
(рядок)

Яким видом масиву повертати дані:

  • OBJECT – об’єкт, що конвертує в об’єкт WP_Term .
  • ARRAY_A – асоціативний масив;
  • ARRAY_N – індексований масив.

Типово: OBJECT

$filter
(рядок)

Тип фільтрації. Одне із значень:

  • raw– просто поверне значення
  • edit– фільтр esc_html() якщо це поле description, та фільтр esc_attr() якщо інше поле.
  • db
  • slug
  • rss
  • attribute– фільтр esc_attr()
  • js– фільтр esc_js()

Дивіться параметр $context у функції sanitize_term_field() . Або загляньте в код функції.
За замовчуванням: ‘raw’

Приклади

0

#1 Приклади як отримати терміни різних таксономій

// Отримаємо рубрику "Новини" на її ім'я:
$term = get_term_by( 'name', 'Новини', 'category' );

// Отримаємо дані мітки (таксономія post_tag)
// Альтернативна назва (слаг) якої metka:
$term = get_term_by( 'slug', 'metka', 'post_tag');

// Отримаємо термін "Новини" з таксономії "my_custom_taxonomy" на його ім'я:
$term = get_term_by( 'name', 'Новини', 'my_custom_taxonomy' );

// Отримання терміну з id (term_id) з таксономії 'category'.
get_term_by( 'id', 12, 'category' )

Для отримання терміну ID краще використовувати функцію get_term() .

В результаті цих прикладів змінна $termміститиме подібний об’єкт:

stdClass Object
(
	[term_id] => 80
	[name] => Моя Рубрика
	[slug] => moya-rubrika
	[term_group] => 0
	[term_taxonomy_id] => 87
	[taxonomy] => my_tax
	[description] =>
	[parent] => 0
	[count] => 5
)
0

#2 Отримання рубрики посту

Цей приклад показує, як отримати всі дані першої рубрики посту, використовуючи get_term_by:

// отримуємо всі рубрики поточного посту
$postCategories = get_the_category( $post->ID );

// збираємо дані про всі рубрики посту в $myCategories
foreach ( $postCategories as $postCategory ) {
	$myCategories[] = get_term_by( 'id', $postCategory->cat_ID, 'category' );
}
// тут $myCategories містить дані всіх рубрик посту

// Першу рубрику посту можна отримати так:
$myCategory = get_term_by('id', $postCategories[0]->cat_ID, 'category');

Це демонстраційний приклад. По ідеї get_the_category() повертає масив з усіма даними рубрики і, наприклад, дані перші категорії будуть у першому елементі масиву: $postCategories[0].

нотатки

  • Дивіться: () $filter param.

список змін

З версії 2.3.0Введено.
З версії 4.4.0$taxonomy is optional if $field is ‘term_taxonomy_id’ . Перевірено на обернути WP_Term object if $output is OBJECT .
З версії 5.5.0Added ‘ID’ як alias of ‘id’ для $field parameter.

Код get_term_by() WP 6.0.2

function get_term_by( $field, $value, $taxonomy = '', $output = OBJECT, $filter = 'raw' ) {

	// 'term_taxonomy_id' lookups не вимагає taxonomy checks.
	if ( 'term_taxonomy_id' !== $field && ! taxonomy_exists( $taxonomy ) ) {
		return false;
	}

	// Немає потреби в роботі для приємності 'slug' або 'name'.
	if ( 'slug' === $field || 'name' === $field ) {
		$value = (string) $value;

		if ( 0 === strlen( $value ) ) {
			return false;
		}
	}

	if ( 'id' === $field || 'ID' === $field || 'term_id' === $field ) {
		$term = get_term((int) $value, $taxonomy, $output, $filter);
		if ( is_wp_error( $term ) || null === $term ) {
			$ term = false;
		}
		return $term;
	}

	$ args = array (
		'get' => 'all',
		'number' => 1,
		'taxonomy' => $taxonomy,
		'update_term_meta_cache' => false,
		'orderby' => 'none',
		'suppress_filter' => true,
	);

	switch ($field) {
		case 'slug':
			$args['slug'] = $value;
			break;
		case 'name':
			$args['name'] = $value;
			break;
		case 'term_taxonomy_id':
			$args['term_taxonomy_id'] = $value;
			unset( $args['taxonomy'] );
			break;
		default:
			return false;
	}

	$ terms = get_terms ($ args);
	if ( is_wp_error( $terms ) || empty( $terms ) ) {
		return false;
	}

	$ term = array_shift ($ terms);

	// У випадку 'term_taxonomy_id', override the provided `$taxonomy` with whatever we find in the DB.
	if ( 'term_taxonomy_id' === $field ) {
		$taxonomy = $term->taxonomy;
	}

	return get_term($term, $taxonomy, $output, $filter);
}

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

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