WordPress как на ладони
wordpress jino

get_post_ancestors() WP 2.5.0

Получает ID всех родительских страниц к указанной странице. Возвращает массив ID родительских страниц, если родительских страниц нет, то будет возвращен пустой массив.

Используется в: get_ancestors().
Работает на основе: get_post()

Хуков нет.

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

get_post_ancestors( $post_id );
$post_id(число/объект) (обязательный)
ID или объект записи (поста).

Примеры

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

Допустим страница 30 является дочерней к 20, а 20 дочерней к 10. Т.е. 10 - страница верхнего уровня, а порядок сверху вниз по дереву такой: 10 > 20 > 30.

Тогда:

$ancestors = get_post_ancestors( 30 );

/* Вернет

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

#2 Проверим есть ли дочерняя страница

У нас есть вложенная структура постоянных страниц и нам нужно проверить является ли ID 34 родителем для страницы 12:

$ancestors = get_post_ancestors( 12 );
if( in_array(34, $ancestors) )
	echo "пост 34 - это родительский к 12";
else
	echo "пост 34 не является родителем поста 12";

Код get post ancestors: wp-includes/post.php WP 4.9

<?php
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 = $ancestors[] = $post->post_parent;

	while ( $ancestor = get_post( $id ) ) {
		// Loop detection: If the ancestor has been seen before, break.
		if ( empty( $ancestor->post_parent ) || ( $ancestor->post_parent == $post->ID ) || in_array( $ancestor->post_parent, $ancestors ) )
			break;

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

	return $ancestors;
}

Cвязанные функции

Из метки: post пост

Еще из метки: Связи

Еще из раздела: Страницы

get_post_ancestors 4 комментария
  • Dastan cайт: im1instrumental.net @

    Вот я не понимаю как сделать родительский пост пример вот negative
    1-Сам пост http://www.hipstrumentals.com/2011/11/kid-ink-like-a-g-instrumental-hook/
    2-родительский пост http://www.hipstrumentals.com/2011/11/kid-ink-like-a-g-instrumental-hook/kid-ink-ft-travis-porter-like-a-g-instrumental/

    Ответить6 лет назад #
    • Kama4660

      Че это еще за определение родительский пост? Пост — одноуровневый тип записи, который объединяется категориями. Родительскими могут быть только постоянные страницы — у них многоуровневая структура.

      Ответить5.10 лет назад #
      • Mixa cайт: mixa-blog.org.ua @

        Ничего подобного. Я как раз нашел этот пост потому что искал информацию о том, как создавать родительские посты. Тут дело не в иерархии. Посмотрите как реализованы вариаии товара в wp e commerce

        Ответить5.5 лет назад #
        • Kama4660

          В таблице постов есть поле "родитель". Теоретически конечно можно создать дочерний пост, к посту. Но, это уже нестандартный подход и нужно будет под это дело писать код отдельный (плагин) или что-то в этом роде. Базово, ВП такое не поддерживает, насколько я знаю. unknw

          Кстати, если есть на примете такой плагин, не могли бы поделиться. Только интересует плагин отдельно под это дело, а не как одна из функций, какого-то плагина.

          Ответить5.5 лет назад #

Здравствуйте, !

Ваш комментарий