wp_get_object_terms() WP 2.3.0

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

Ця функція є ядром функції get_the_terms() . У більшості випадків краще використовувати get_the_terms() замість цієї функції, тому що результат кешується і потенційно може заощадити багато додаткових запитів.

Це особливо корисно, якщо ви перебираєте результати постів у циклі, тому що WP_Query{} за замовчуванням завантажує всі терміни для постів, що запитуються.

Примітка: цією функцією можна передати кілька постів та кілька назв таксономій, щоб отримати всі дані відразу, а get_the_terms() працює з одним постом та однією таксономією.

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

Повертає

WP_Term[]|WP_Error.

  • Массив объектовмістять інформацію про терміни. Якщо помилка поверне об’єкт WP_Error.
  • array()– Якщо елементи не знайдено.
  • WP_Error– якщо зазначеної таксономії немає.

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

wp_get_object_terms( $object_ids, $taxonomies, $args );
$object_ids
(рядок/масив) (обов’язковий)
ID об’єктів, терміни яких необхідно отримати. Більше одного ID потрібно вказувати в масиві: array (23, 56, 89).
$taxonomies
(рядок/масив) (обов’язковий)
Назву таксономії терміни якої потрібно отримати. Можна вказати кілька назв. Кілька назв потрібно передавати через масив: array(‘category’, ‘name2’).
$args
(рядок/масив)

Аргументи, відповідно до яких буде отримано результат. Можна вказувати як рядок запиту.

З версії WP 4.7 можна вказувати всі параметри функції get_terms()

За замовчуванням: попереднє встановлення

  • orderby (рядок)
    За яким критерієм сортувати результат. Може бути:

    • name– по імені. За замовчуванням.
    • count– За кількістю записів.
    • slug– по ярлику.
    • term_group
    • term_order
    • none– Виводити без сортування.

    За замовчуванням: ‘name’

  • order (рядок)
    Напрямок сортування. ASC– По порядку, DESC– у зворотному порядку.
    За замовчуванням: ‘ASC’

  • fields (рядок)
    Які поля включати до результуючого масиву. Може бути:

    • all– в результаті ми отримай масив об’єктів з усією інформацією про кожний термін.
    • ids– Отримати тільки ID термінів.
    • names– Отримати тільки імена термінів.
    • slugs– отримає лише ярлики термінів.
    • all_with_object_id– Теж що і all, плюс ще й ID термінів.
    • tt_ids– Поверне ID таксономій термінів ( внутрішній ID для зв’язку таблиць).

    Також можливі комбіновані варіанти, наприклад:

    • id=>name– Поверне пару ID => Ім’я.
    • id=>slug– Поверне пару ID => Ярлик.

    За замовчуванням: ‘all’

  • meta_query (масив)
    Параметри мета запиту. Дивіться WP_Meta_Query{} . З версії 4.4.

  • update_term_meta_cache (логічний)
    Чи потрібно оновити кеш метаданих отриманих елементів таксономії. З версії 4.4.
    За замовчуванням: ‘true’

Приклади

0

#1 Усі елементи таксономії ‘productcategories’ посту

Отримаємо терміни таксономії productcategories поточного поста ($post->ID):

$productcategories = wp_get_object_terms( $post->ID, 'productcategories' );
0

#2 Поверне список елементів таксономії “product”, встановлених для запису:

$product_terms = wp_get_object_terms( $post->ID, 'product' );

if( $product_terms && ! is_wp_error( $product_terms ) ){

	$ lis = [];
	foreach( $product_terms as $term ){
		$lis[] = '<li><a href="'. get_term_link( $term ) .'">'. $term->name .'</a></li>';
	}

	echo '<ul>'. implode( "n", $lis ) .'</ul>';
}
0

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

Дивіться третій приклад в описі функції get_the_terms()

список змін

З версії 2.3.0Введено.
З версії 4.2.0Added support for ‘taxonomy’ , ‘parent’ , and ‘term_taxonomy_id’ значення $ orderby . Introduced $parent argument.
З версії 4.4.0Introduced $meta_query and $update_term_meta_cache arguments. Якщо $fields єall’ або ‘ all_with_object_id , array of WP_Term objects will be returned.
З версії 4.7.0Зосереджена на використанні WP_Term_Query, і на підтримку будь-яких WP_Term_Query arguments.

Код wp_get_object_terms() WP 6.0.2

function wp_get_object_terms( $object_ids, $taxonomies, $args = array() ) {
	if ( empty( $object_ids ) || empty( $taxonomies ) ) {
		return array();
	}

	if ( ! is_array( $taxonomies ) ) {
		$ taxonomies = array ($ taxonomies);
	}

	foreach ( $taxonomies as $taxonomy ) {
		if ( ! taxonomy_exists( $taxonomy ) ) {
			return new WP_Error( 'invalid_taxonomy', __( 'Invalid taxonomy.' ) );
		}
	}

	if ( ! is_array( $object_ids ) ) {
		$object_ids = array($object_ids);
	}
	$object_ids = array_map( 'intval', $object_ids );

	$ args = wp_parse_args ($ args);

	/**
	 * Filters arguments for retrieving object terms.
	 *
	 * @ Since 4.9.0
	 *
	 * @param array $args На array arguments for retrieving terms for given object(s).
	 * See {@see wp_get_object_terms()} for details.
	 * @param int[] $object_ids Array of object IDs.
	 * @param string[] $taxonomies Перевірка taxonomy names для відновлення термінів від.
	 */
	$args = apply_filters( 'wp_get_object_terms_args', $args, $object_ids, $taxonomies);

	/*
	 * Якщо один або більше прийняті taxonomies is registered with 'args' array,
	 * those params override the `$args` passed to ця функція.
	 */
	$ terms = array ();
	if ( count( $taxonomies ) > 1 ) {
		foreach ( $taxonomies as $index => $taxonomy ) {
			$ t = get_taxonomy ($ taxonomy);
			if ( isset( $t->args ) && is_array( $t->args ) && array_merge( $args, $t->args ) != $args ) {
				unset( $taxonomies [ $ index ] );
				$terms = array_merge( $terms, wp_get_object_terms( $object_ids, $taxonomy, array_merge( $args, $t->args ) ) ));
			}
		}
	} else {
		$ t = get_taxonomy ($ taxonomies [0]);
		if ( isset( $t->args ) && is_array( $t->args ) ) {
			$ args = array_merge ($ args, $ t-> args);
		}
	}

	$args['taxonomy'] = $taxonomies;
	$args['object_ids'] = $object_ids;

	// Taxonomies registered without 'args' param are handled here.
	if ( ! empty( $taxonomies ) ) {
		$terms_from_remaining_taxonomies = get_terms($args);

		// Array keys should be preserved for values ​​of $fields that use term_id for keys.
		if ( ! empty( $args['fields'] ) && 0 === strpos( $args['fields'], 'id=>' ) ) {
			$terms = $terms + $terms_from_remaining_taxonomies;
		} else {
			$terms = array_merge($terms, $terms_from_remaining_taxonomies);
		}
	}

	/**
	 * Filters the terms for a given object чи objects.
	 *
	 * @ Since 4.2.0
	 *
	 * @param WP_Term[] $terms Перелік термінів для given object or objects.
	 * @param int[] $object_ids Array of object IDs для яких термінів були retrieved.
	 * @param string[] $taxonomies Відповідь про taxonomy names from which terms були retrieved.
	 * @param array $args Array of arguments for retrieving terms for the given
	 * object(s). See wp_get_object_terms() for details.
	 */
	$terms = apply_filters( 'get_object_terms', $terms, $object_ids, $taxonomies, $args);

	$object_ids = implode(',', $object_ids);
	$taxonomies = "'" . implode( "', '", array_map( 'esc_sql', $taxonomies ) ) . "'";

	/**
	 * Filters the terms for a given object чи objects.
	 *
	 * The `$taxonomies` parameter passed to this filter is formatted as SQL fragment. The
	 * {@see 'get_object_terms'} filter is recommended as an alternative.
	 *
	 * @ Since 2.8.0
	 *
	 * @param WP_Term[] $terms Перелік термінів для given object or objects.
	 * @param string $object_ids Comma separated list of object IDs для яких термінів були retrieved.
	 * @param string $taxonomies SQL fragment of taxonomy names from which terms були retrieved.
	 * @param array $args Array of arguments for retrieving terms for the given
	 * object(s). See wp_get_object_terms() for details.
	 */
	return apply_filters( 'wp_get_object_terms', $terms, $object_ids, $taxonomies, $args );
}

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

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