Получить заголовок верхнего родительского уровня страницы
Как получить заголовок страницы самого верхнего родителя текущей страницы посетителя?
Опишу ситуацию:
У меня такая структура страниц:
- Пример Заголовка 1
- Пример Заголовка 1-1
- Пример Заголовка 1-1-1
- Пример Заголовка 1-1-2
- Пример Заголовка 1-2
- Пример Заголовка 1-1
- Пример Заголовка 2
- Пример Заголовка 3
- Пример Заголовка 4
Вот что я хочу получить:
- Если пользователь на
Пример Заголовка 1— вернутьПример Заголовка 1 - Если пользователь на
Пример Заголовка 1-1— вернутьПример Заголовка 1 - Если пользователь на
Пример Заголовка 1-1-1— вернутьПример Заголовка 1 - Если пользователь на
Пример Заголовка 2— вернутьПример Заголовка 2
Обычно я бы проверял $post->parent и если 0, то возвращал заголовок страницы, иначе заголовок родительской страницы. Проблема в том, что $post->parent возвращает только один уровень вверх. Мне нужна рекурсивная функция, которая будет подниматься до тех пор, пока $post->parent == 0.
Я могу реализовать это сам, но единственный способ, который приходит в голову — использовать get_post() каждый раз. Но представьте, что я на 8 уровне вложенности — это потребует загрузки 8 страниц, чтобы добраться до верхнего уровня. Есть ли более эффективный способ?
Нашел такой способ:
if ( 0 == $post->post_parent ) {
the_title();
} else {
$parents = get_post_ancestors( $post->ID );
echo apply_filters( "the_title", get_the_title( end ( $parents ) ) );
}
Если у кого-то есть более оптимальное решение, пожалуйста, поделитесь.
Это, вероятно, настолько же хорошо, как и любой другой способ. Ещё один вариант — циклически перебирать get_page( array( 'post_parent' => $post->post_parent ) ), пока не дойдёшь до вершины иерархии. Ваш подход явно будет эффективнее.
Chip Bennett
Не уверен, что это наиболее эффективный способ, но это можно сделать с помощью рекурсивной функции
function get_post_ancestor_title($post_id){
$post = get_post($post_id)->post_parent;
if ( 0 == $post->post_parent ) {
return get_the_title();
} else {
get_post_ancestor_title($post->ID);
}
}
Лучше вот так: https://css-tricks.com/snippets/wordpress/find-id-of-top-most-parent-page/
TCB13