Obtener el título de la página padre de nivel superior
¿Cómo puedo obtener el título de la página padre más alta de la página actual que visita el usuario?
Permíteme describirlo:
Tengo esta estructura de páginas:
- Título Ejemplo 1
- Título Ejemplo 1-1
- Título Ejemplo 1-1-1
- Título Ejemplo 1-1-2
- Título Ejemplo 1-2
- Título Ejemplo 1-1
- Título Ejemplo 2
- Título Ejemplo 3
- Título Ejemplo 4
Esto es lo que quiero devolver:
- Usuario en
Título Ejemplo 1
devuelveTítulo Ejemplo 1
- Usuario en
Título Ejemplo 1-1
devuelveTítulo Ejemplo 1
- Usuario en
Título Ejemplo 1-1-1
devuelveTítulo Ejemplo 1
- Usuario en
Título Ejemplo 2
devuelveTítulo Ejemplo 2
Normalmente lo que haría sería verificar $post->parent
y si es 0
entonces devolver el título de la página, de lo contrario devolver el título de la página superior. El problema es que $post->parent solo retrocede un nivel. Necesito usar algún tipo de función recursiva que siga retrocediendo hasta que $post->parent == 0
.
Podría manejar esto yo mismo, pero la única forma que se me ocurre sería usar get_post() cada vez, pero imagina que estoy 8 niveles dentro (necesitamos ir más profundo). Eso implicaría cargar 8 páginas para finalmente llegar al nivel superior. ¿Alguien tiene una mejor forma de hacer esto?

Encontrado de esta manera:
if ( 0 == $post->post_parent ) {
the_title(); // Mostrar el título si no hay post padre
} else {
$parents = get_post_ancestors( $post->ID ); // Obtener ancestros del post
echo apply_filters( "the_title", get_the_title( end ( $parents ) ) ); // Mostrar título del ancestro más alto
}
Si alguien tiene una mejor manera, por favor responda.

Probablemente eso sea tan bueno como cualquier otra opción. Otra forma sería iterar a través de get_page( array( 'post_parent' => $post->post_parent ) )
hasta llegar al nivel superior de la jerarquía. Claramente, tu enfoque sería más eficiente.

No estoy seguro si esta es la forma más eficiente, esto se puede hacer mediante una función recursiva
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);
}
}

Mejor así: https://css-tricks.com/snippets/wordpress/find-id-of-top-most-parent-page/
