In Worpdress è possibile creare pagine e sottopagine. Nel momento in cui si crea una pagina è possibile infatti specificare una pagina “madre”. Più pagine quindi possono avere in comune la stessa “madre”, che è un altro modo per dire che più sottopagine dipendono dalla stessa pagina.
E’ un modo per ordinare gerarchicamente i propri contenuti e può essere molto utile.

Vediamo come visualizzare, all’interno di una pagina, nella sidebar, un elenco di link a tutte le pagine “sorelle” di quella corrente, ed il link alla pagina madre.
Ecco un esempio di quello che andremo a realizzare: nella sidebar sotto il modulo per la ricerca compare un elenco delle sottopagine della pagina che state visualizzando.
Verificheremo che la pagina corrente sia una sottopagina: in questo caso recupereremo l’ID della pagina madre e visualizzeremo un link a tutte le “figlie” di questa. Se invece la pagina corrente non è una sottopagina faremo in modo di visualizzare tutte le pagine figlie.
Alla variabile $parentId assegneremo l’ID della pagina di cui verrano visualizzate le figlie (o sottopagine). Quindi se quella corrente è una pagina “figlia”, $parentId conterrà l’ID della rispettiva pagina madre. Se la pagina corrente invece non ha “madre” il valore da assegnare a $parentId sara proprio l’ID della pagina corrente, in modo che ne vengano visulizzate le figlie.
global $wp_query;
if( empty($wp_query->post->post_parent) ) {
$parentId = $wp_query->post->ID;
$linktop=false;
$parenttitle = $wp_query->post->post_title;
} else {
$parentId = $wp_query->post->post_parent;
$parenttitle = $wp_query->post_parent->post_title;
$linktop=true;
}
La variabile $linktop ci servirà per produrre o meno un link alla pagina madre: se già ci troviamo in una pagina di questo tipo il link è inutile, poichè la pagina madre è proprio quella che stiamo visualizzando.
Recuperato l’ID della pagina madre, dobbiamo procurarci il titolo di questa, per visualizzarlo in testa al menu.
$postparentvalues = get_post($parentId);
$parenttitle = $postparentvalues->post_title;
Ricaveremo anche il permalink, ma solo nel caso in cui quella corrente non sia la pagina madre stessa perchè – come detto – solo in quest’ultimo caso è necessario il link. Ed è proprio per questa verifica che abbiamo specificato $linktop, come TRUE o FALSE.
Ecco allora il primo output con il titolo della pagina madre, ed eventualmente un link ad essa (se quella corrente è una pagina figlia).
<?php if ($linktop) { ?><a href="<?php echo get_permalink($parentId); ?>"><?php } ?>
<?php echo $parenttitle; ?>
<?php if ($linktop) { ?></a><?php } ?>
A questo punto non resta che utilizzare la funzione wp_list_pages() per visualizzare la lista con tutte le sottopagine della “madre” già individuata. A questo scopo è stato previsto il parametro child_of, al quale assegneremo ancora una volta il valore di $parentId.
wp_list_pages(title_li=&child_of='.$parentId.'&sort_column=menu_order);
Tutto qui, aggiungiamo solo la condizione if (is_page) in modo che questo “menu” compaia nella sidebar solo se ci troviamo all’interno di una pagina.
Ecco il codice completo, con un minimo di html:
<?php if (is_page()) {
global $wp_query;
if( empty($wp_query->post->post_parent) ) {
$parentid = $wp_query->post->ID;
$linktop=false;
$parenttitle = $wp_query->post->post_title;
} else {
$parentId = $wp_query->post->post_parent;
$parenttitle = $wp_query->post_parent->post_title;
$linktop=true;
}
$postparentvalues = get_post($parentId);
$parenttitle = $postparentvalues->post_title;
?>
<h3>
<?php if ($linktop) { ?><a href="<?php echo get_permalink($parentId); ?>"><?php } ?>
<?php echo $parenttitle; ?>
<?php if ($linktop) { ?></a><?php } ?>
</h3>
<ul>
wp_list_pages('title_li=&child_of='.$parentId.'&sort_column=menu_order');
</ul>
<?php } ?>
Un’ultima avvertenza: questo script non funziona per qualche strano motivo con le sotto-sotto pagine, ed è un vero peccato… se qualcuno sa perchè o come risovere il problema, lo aspetto nei commenti .
E infine qualche link utile per comprendere a pieno questo tutorial:
la funzione wp-query()
la funzione wp_list_pages()

ma questo codice va inserito nel file sidebar.php?
grazie
scrivilo giusto il codice se vuoi aiutare la gente
l’ultima parte dell’ultimo codice è:
@davide, in effetti , mi erano sfuggiti gli apici, ho corretto. grazie della segnalazione
Molto utile, grazie!
questo codice sarebbe da rivedere perchè mentre nelle pagine figlie mostra le sorelle e la pagina madre come titolo e funziona tutto perfettamente, nelle pagine madri non mostra solo le figlie, mostra tutte le pagine del sito…