get_ancestors

Получает ID родительских элементов указанного объекта (страницы, категории).

✈ 1 раз = 0.001263с = очень медленно | 50000 раз = 1.27с = быстро PHP 7.0.5, WP 4.5.1
Хуки из функции:
get_ancestors
Возвращает

Массив идентификаторов (ID) родительских элементов.

Использование

get_ancestors( $object_id, $object_type, $resource_type );
$object_id(строка/число) (обязательный)
ID дочернего элемента (элемента ID родительских элементов которого надо получить).
По умолчанию: нет
$object_type(строка)
Название типа объекта, к которому относится элемент (page, category).
По умолчанию: ”
$resource_type(строка)
Название типа объекта. Может быть: ‘post_type’ или ‘taxonomy’. С версии 4.1.
По умолчанию: ”

Примеры

#1. Получим ID всех родительских элементов таксономии

Предположим у нас есть такая структура категорий. В скобках указаны ID:

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

Теперь, переменная $rrr будет содержать в себе такой массив:

$rrr = get_ancestors( 448, 'page' );

Теперь, переменная $rrr будет содержать в себе массив:

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

	$ancestors = array();

	if ( empty( $object_id ) ) {

		/** This filter is documented in 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 ) ) {
			$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 array  $ancestors     An array 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 );
}

  • Nikita

    Интересный он массив выводит. А вы точно его тупо не скопировали?