Obtener el título de la página padre de nivel superior

25 oct 2011, 17:44:04
Vistas: 19.2K
Votos: 7

¿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 2
  • Título Ejemplo 3
  • Título Ejemplo 4

Esto es lo que quiero devolver:

  • Usuario en Título Ejemplo 1 devuelve Título Ejemplo 1
  • Usuario en Título Ejemplo 1-1 devuelve Título Ejemplo 1
  • Usuario en Título Ejemplo 1-1-1 devuelve Título Ejemplo 1
  • Usuario en Título Ejemplo 2 devuelve Tí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?

0
Todas las respuestas a la pregunta 2
3
15

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.

25 oct 2011 17:56:30
Comentarios

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.

Chip Bennett Chip Bennett
25 oct 2011 18:09:56

Espero que no te importe la edición. (+1)

kaiser kaiser
25 oct 2011 20:55:15

Sé que esto es antiguo, pero como devuelve un array (incluso si solo hay un ancestro), parece no funcionar.

Nathan Nathan
14 oct 2022 20:23:14
1

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);
    }
}
25 oct 2011 22:52:18
Comentarios