get_post_ancestors() WP 2.5.0

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

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

Хуків немає.

Повертає

int[]. Повертає масив із ID батьківських записів. Якщо батьківських записів немає, то буде повернено порожній масив.

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

get_post_ancestors( $post_id );
$post_id
(число/об’єкт) (обов’язковий)
ID або об’єкт запису (поста), батьків якого потрібно отримати.

Приклади

0

#1 Демонстрація

Допустимо сторінка 30 є дочірньою до 20, а 20 дочірньою до 10. Тобто. 10 – сторінка верхнього рівня, а порядок зверху вниз по дереву такий: 10> 20> 30 .

Тоді:

$ancestors = get_post_ancestors(30);

/* Поверне

Array
(
	[0] => 20
	[1] => 10
)
*/
0

#2 Виведемо заголовок батьківської сторінки

Нехай структура наших сторінок така:

Сторінка 1 (ID=611)
	- Сторінка 1-1 (ID=613)
		- Сторінка 1-1-1 (ID=615)
			- Сторінка 1-1-1-1 (ID=617)
Сторінка 2 (ID=712)
	- Сторінка 2-1 (ID=755)
	- Сторінка 2-2 (ID=781)

Отримаємо заголовок батьківської сторінки:

// Отримуємо масив з id всіх батьків (передаємо ID Сторінка 1-1-1-1)
$ids = get_post_ancestors(617);

/* Поверне

Array
(
	[0] => 615
	[1] => 613
	[2] => 611
)
*/

// Беремо останній ID з масиву – це ID найвищої сторінки
$ id = array_pop ($ ids);

// Виводимо заголовок цієї сторінки
echo get_the_title($id); // виведе Сторінка 1
0

#3 Перевіримо, чи є дочірня сторінка

У нас є вкладена структура постійних сторінок і нам потрібно перевірити, чи є ID 34 батьком для сторінки 12:

$ancestors = get_post_ancestors(12);
if( in_array(34, $ancestors) )
	echo "пост 34 - це батьківський до 12";
else
	echo "пост 34 не є батьком посту 12";

список змін

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

Код get_post_ancestors() WP 6.0.2

function get_post_ancestors( $post ) {
	$post = get_post($post);

	if ( ! $post || empty( $post->post_parent ) || $post->post_parent == $post->ID ) {
		return array();
	}

	$ancestors = array();

	$id = $post->post_parent;
	$ancestors[] = $id;

	while ($ancestor = get_post($id)) {
		/ / Loop detection: Якщо ancestor has been seen before, break.
		if ( empty( $ancestor->post_parent ) || ( $ancestor->post_parent == $post->ID ) || in_array( $ancestor->post_parent, $ancestors, true ) ) {
			break;
		}

		$id = $ancestor->post_parent;
		$ancestors[] = $id;
	}

	return $ancestors;
}

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

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