Ottenere il titolo della pagina genitore di livello superiore

25 ott 2011, 17:44:04
Visualizzazioni: 19.2K
Voti: 7

Come posso ottenere il titolo della pagina genitore di livello più alto della pagina che il visitatore sta attualmente visualizzando?

Lasciami descrivere:

Ho questa struttura di pagine:

  • Titolo Esempio 1
    • Titolo Esempio 1-1
      • Titolo Esempio 1-1-1
      • Titolo Esempio 1-1-2
    • Titolo Esempio 1-2
  • Titolo Esempio 2
  • Titolo Esempio 3
  • Titolo Esempio 4

Ecco cosa voglio ottenere:

  • L'utente è su Titolo Esempio 1 restituisce Titolo Esempio 1
  • L'utente è su Titolo Esempio 1-1 restituisce Titolo Esempio 1
  • L'utente è su Titolo Esempio 1-1-1 restituisce Titolo Esempio 1
  • L'utente è su Titolo Esempio 2 restituisce Titolo Esempio 2

Normalmente quello che farei è controllare $post->parent e se è 0 allora restituire il titolo della pagina altrimenti restituire il titolo della pagina superiore. Il problema è che $post->parent torna indietro solo di un livello. Ho bisogno di usare una sorta di funzione ricorsiva che continua a tornare indietro finché $post->parent == 0.

Ora posso gestirlo da solo ma l'unico modo a cui ho pensato per farlo sarebbe usare get_post() ogni volta ma immagina di essere a 8 livelli di profondità (dobbiamo andare più a fondo). Ciò comporterebbe il caricamento di 8 pagine per arrivare finalmente al livello superiore. Qualcuno ha un modo migliore per farlo?

0
Tutte le risposte alla domanda 2
3
15

Trovato in questo modo:

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

Se qualcuno ha un modo migliore per favore risponda.

25 ott 2011 17:56:30
Commenti

Probabilmente è la soluzione migliore. Un altro modo sarebbe quello di scorrere iterativamente attraverso get_page( array( 'post_parent' => $post->post_parent ) ) fino a raggiungere la cima della gerarchia. Il tuo approccio sarebbe chiaramente più efficiente.

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

Spero non ti dispiaccia la modifica. (+1)

kaiser kaiser
25 ott 2011 20:55:15

So che è vecchio, ma poiché restituisce un array (anche se c'è un solo antenato), non sembra funzionare.

Nathan Nathan
14 ott 2022 20:23:14
1

Non sono sicuro che sia il modo più efficiente, ma può essere fatto tramite una funzione ricorsiva

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 ott 2011 22:52:18
Commenti