J'utilise une hiérarchie de pages et je veux afficher le titre de la page des parents et des grands-parents (s'il y en a).
La structure est quelque chose comme
Page de démarrage
Page d'accueil> Deuxième page
Page d'accueil> Deuxième page> Troisième page
Page d'accueil> Deuxième page> Troisième page> Quatrième page
Le titre devrait ressembler à: Sur la quatrième page: "Quatrième page - Troisième page - Deuxième page - Page de démarrage" Sur la troisième page: "Troisième page - Deuxième page - Page de démarrage"
La solution que j'ai trouvée n'est pas si bonne:
<title><?php
if(is_page()){
$parent = get_post($post->post_parent);
$parent_title = get_the_title($parent);
$grandparent = $parent->post_parent;
$grandparent_title = get_the_title($grandparent);
if ($parent) {
if ($grandparent) {
echo wp_title('') . " - " . $parent_title . " - " . $grandparent_title . " - ";
}
else {
echo wp_title('') . " - " . $parent_title . " - ";
}
}
else {
echo wp_title('') . " - ";
}
}?> Startpage</title>
Au niveau de la deuxième page, le titre de cette page devient double ... "Deuxième page - Deuxième page - Page de démarrage"
N'importe qui?
construire éventuellement sur get_ancestors()
;
exemple:
if( is_page() ) :
echo $post->post_title;
if( $ancs = get_ancestors($post->ID,'page') ) {
foreach( $ancs as $anc ) {
echo ' -> ' . get_page( $anc )->post_title;
}
}
endif;
Voici une solution. Il utilise la fonction get_ancestors () , qui renvoie un tableau des ancêtres de la page en cours, du plus bas au plus élevé dans la hiérarchie.
Comme je ne connaissais pas vraiment l'ordre dans lequel vous vouliez l'afficher (le plus bas au plus élevé ou le plus élevé au plus bas), j'ai défini un paramètre $ reverse (par défaut: false) pour changer l'ordre.
<?php
function print_page_parents($reverse = false){
global $post;
//create array of pages (i.e. current, parent, grandparent)
$page = array($post->ID);
$page_ancestors = get_ancestors($post->ID, 'page');
$pages = array_merge($page, $page_ancestors);
if($reverse) {
//reverse array (i.e. grandparent, parent, current)
$pages = array_reverse($pages);
}
for($i=0; $i<count($pages); $i++) {
$output.= get_the_title($pages[$i]);
if($i != count($pages) - 1){
$output.= " » ";
}
}
echo $output;
}
//print lowest to highest
print_page_parents();
//print highest to lowest
print_page_parents($reverse = true);
?>
J'espère que ça aide!
Vq.