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()

This entry was posted in Tutorial, Wordpress and tagged , , . Bookmark the permalink.

6 Responses to WordPress: elencare le sottopagine della pagina corrente nella sidebar

  1. paolo says:

    ma questo codice va inserito nel file sidebar.php?

    grazie

  2. Davide says:

    scrivilo giusto il codice se vuoi aiutare la gente ;-)
    l’ultima parte dell’ultimo codice è:

  3. Davide says:
    <ul>
    <?php wp_list_pages('title_li=&child_of='.$parentId.'&sort_column=menu_order'); ?>
    </ul>
  4. daniele says:

    @davide, in effetti , mi erano sfuggiti gli apici, ho corretto. grazie della segnalazione

  5. luca says:

    Molto utile, grazie!

  6. Sam says:

    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…

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>