get_ancestors() WP 3.1.0

Отримує ID батьківських елементів вказаного об’єкта (сторінки, таксономії, категорії).

Працює на основі:
get_post_ancestors() ,
get_term()
Основа для:
get_term_parents_list()
1 раз – 0.00174 сек
(дуже повільно) | 50000 разів – 0.95 сек
(дуже швидко) |
PHP 7.2.5, WP 5.0.1

Хуки з функції

Повертає

int[]. Масив ідентифікаторів (ID) батьківських елементів, де останній осередок масиву міститиме ID найвищого елемента ланцюжка. Або порожній масив.

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

get_ancestors( $object_id, $object_type, $resource_type );
$object_id
(рядок/число) (обов’язковий)
ID дочірнього елемента (елемента ID батьківських елементів якого треба отримати).
$object_type
(рядок)
Назва типу об’єкта, якого відноситься елемент. Це може бути назва таксономії:
post_tag,
category… або назва типу запису
page,
post.


За замовчуванням: ”
$resource_type
(рядок) (WP 4.1)
Назва типу об’єкта. Можливо:
post_typeабо
taxonomy.


За замовчуванням: ”

Приклади

0

#1 Отримаємо ID всіх батьківських елементів таксономії

Припустимо, у нас є така структура категорій. У дужках вказано ID:

  • Книги (6)
    • фантастика (23)
      • Рей Бредбері (208)
$ancestors = get_ancestors(208, 'category');

Тепер, змінна $ancestors міститиме такий масив:

Array
(
	[0] => 23
	[1] => 6
)
0

#2 Отримаємо ID всіх батьківських сторінок

Ідентично першому прикладу можна отримати ID батьківських постійних сторінок, припустимо у нас така структура:

  • Про сайт (447)
    • Дочірня сторінка (448)
$ancestors = get_ancestors(448, 'page');

Тепер, змінна $ancestors міститиме в собі масив:

Array
(
	[0] => 447
)
0

#3 Отримаємо ID найвищої батьківської категорії

$ancestors = get_ancestors(208, 'category');
$top_cat_id = array_pop($ancestors);

список змін

З версії 3.1.0Введено.
З версії 4.1.0Introduced the $resource_type argument.

Код get_ancestors() WP 6.0.2

function get_ancestors( $object_id = 0, $object_type = '', $resource_type = '' ) {
	$object_id = (int) $object_id;

	$ancestors = array();

	if ( empty( $object_id ) ) {

		/** Цей filter is documented в wp-includes/taxonomy.php */
		return apply_filters( 'get_ancestors', $ancestors, $object_id, $object_type, $resource_type );
	}

	if ( ! $resource_type ) {
		if ( is_taxonomy_hierarchical( $object_type ) ) {
			$resource_type = 'taxonomy';
		} elseif (post_type_exists($object_type)) {
			$resource_type = 'post_type';
		}
	}

	if ( 'taxonomy' === $resource_type ) {
		$ term = get_term ($ object_id, $ object_type);
		while ( ! is_wp_error( $term ) && ! empty( $term->parent ) && ! in_array( $term->parent, $ancestors, true ) ) {
			$ancestors[] = (int) $term->parent;
			$term = get_term($term->parent, $object_type);
		}
	} elseif ( 'post_type' === $resource_type ) {
		$ancestors = get_post_ancestors( $object_id );
	}

	/**
	 * Filters a given object's ancestors.
	 *
	 * @ Since 3.1.0
	 * @since 4.1.1 Introduced the `$resource_type` parameter.
	 *
	 * @param int[] $ancestors An array of IDs of object ancestors.
	 * @param int $object_id Object ID.
	 * @param string $object_type Type of object.
	 * @param string $resource_type Type of resource $object_type is.
	 */
	return apply_filters( 'get_ancestors', $ancestors, $object_id, $object_type, $resource_type );
}

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

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