web-dev-qa-db-fra.com

Obtenir le titre parent de la page de niveau supérieur

Comment obtenir le titre de la page parente la plus haute de la page sur laquelle se trouve le visiteur?

Permettez-moi de décrire:

J'ai cette structure de page:

  • Exemple Titre 1
    • Exemple Titre 1-1
      • Exemple Titre 1-1-1
      • Exemple Titre 1-1-2
    • Exemple Titre 1-2
  • Exemple Titre 2
  • Exemple Titre 3
  • Exemple Titre 4

Voici ce que je veux revenir:

  • L'utilisateur est sur Example Title 1 return Example Title 1
  • L'utilisateur est sur Example Title 1-1 return Example Title 1
  • L'utilisateur est sur Example Title 1-1-1 return Example Title 1
  • L'utilisateur est sur Example Title 2 return Example Title 2

Normalement, je vérifie $post->parent et si 0, puis renvoie le titre de la page, sinon renvoie le titre de la page ci-dessus. Le problème est que $ post-> parent ne reviendra que d'un niveau. Je dois utiliser une sorte de fonction récursive qui continue à remonter jusqu'au $post->parent == 0.

Maintenant, je peux gérer cela moi-même, mais la seule façon de le faire serait d'utiliser get_post () à chaque fois, mais imaginons que j'ai 8 couches de profondeur (nous devons aller plus loin). Cela impliquerait de charger 8 pages pour enfin atteindre le plus haut niveau. Quelqu'un a une meilleure façon de faire ça?

6
Brady

Trouvé de cette façon:

if ( 0 == $post->post_parent ) {
    the_title();
} else {
    $parents = get_post_ancestors( $post->ID );
    echo apply_filters( "the_title", get_the_title( end ( $parents ) ) );
}

Quelqu'un a un meilleur moyen s'il vous plaît répondre.

13
Brady

Pas sûr que ce soit efficace c'est possible avec recursive function

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);
    }
}
4
Sisir