Obține titlul paginii părinte de nivel superior

25 oct. 2011, 17:44:04
Vizualizări: 19.2K
Voturi: 7

Cum pot obține titlul paginii părinte de nivel suprem a paginii pe care se află vizitatorul în prezent?

Permiteți-mi să explic:

Am această structură de pagini:

  • Titlu Exemplu 1
    • Titlu Exemplu 1-1
      • Titlu Exemplu 1-1-1
      • Titlu Exemplu 1-1-2
    • Titlu Exemplu 1-2
  • Titlu Exemplu 2
  • Titlu Exemplu 3
  • Titlu Exemplu 4

Iată ce doresc să returnez:

  • Dacă utilizatorul este pe Titlu Exemplu 1 returnează Titlu Exemplu 1
  • Dacă utilizatorul este pe Titlu Exemplu 1-1 returnează Titlu Exemplu 1
  • Dacă utilizatorul este pe Titlu Exemplu 1-1-1 returnează Titlu Exemplu 1
  • Dacă utilizatorul este pe Titlu Exemplu 2 returnează Titlu Exemplu 2

În mod normal, aș verifica $post->parent și dacă este 0 atunci aș returna titlul paginii, altfel aș returna titlul paginii de deasupra. Problema este că $post->parent merge doar cu un nivel înapoi. Am nevoie de o funcție recursivă care continuă să meargă înapoi până când $post->parent == 0.

Pot să rezolv asta singur, dar singura metodă la care mă pot gândi ar fi să folosesc get_post() de fiecare dată, dar imaginați-vă că sunt la 8 niveluri adâncime (trebuie să mergem și mai departe). Asta ar implica încărcarea a 8 pagini pentru a ajunge la nivelul superior. Are cineva o metodă mai bună de a face asta?

0
Toate răspunsurile la întrebare 2
3
15

Am găsit această metodă:

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

Dacă cineva are o metodă mai bună, vă rog să răspundeți.

25 oct. 2011 17:56:30
Comentarii

Probabil că este la fel de bun ca oricare altul. Un alt mod ar fi să parcurgi iterativ prin get_page( array( 'post_parent' => $post->post_parent ) ) până ajungi în vârful ierarhiei. Abordarea ta ar fi clar mai eficientă.

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

Sper să nu te superi pentru editare. (+1)

kaiser kaiser
25 oct. 2011 20:55:15

Știu că este vechi, dar deoarece returnează un array (chiar dacă există un singur strămoș), nu pare să funcționeze.

Nathan Nathan
14 oct. 2022 20:23:14
1

Nu sunt sigur dacă este eficient, dar acest lucru poate fi realizat prin funcție recursivă

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
Comentarii