web-dev-qa-db-fra.com

titre de la page, titre parent et titre des grands-parents

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?

6
Erikm

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;
6
Michael

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.= " &raquo; ";
    }
  }
    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.

3
Vidal Quevedo