it-swarm.com.de

seitentitel, Elterntitel und Großelterntitel

Ich verwende eine Seitenhierarchie und möchte den Titel der Eltern- und Großelternseite anzeigen (falls vorhanden).

Die Struktur ist so etwas wie

Startseite

Startseite> Zweite Seite

Startseite> Zweite Seite> Dritte Seite

Startseite> Zweite Seite> Dritte Seite> Vierte Seite

Der Titel sollte ungefähr so ​​lauten: Auf der vierten Seite: "Vierte Seite - Dritte Seite - Zweite Seite - Startseite" Auf der dritten Seite: "Dritte Seite - Zweite Seite - Startseite"

Die Lösung, die ich gefunden habe, ist nicht so gut:

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

Auf der Ebene der zweiten Seite wird der Titel für diese Seite verdoppelt ... "Zweite Seite - Zweite Seite - Startseite"

Jemand?

6
Erikm

möglicherweise auf get_ancestors() aufbauen;

beispiel:

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

Hier ist eine Lösung. Es verwendet die Funktion get_ancestors () , die ein Array der Vorfahren der aktuellen Seite vom niedrigsten zum höchsten Wert in der Hierarchie zurückgibt.

Da ich nicht genau wusste, in welcher Reihenfolge Sie es anzeigen wollten (niedrigster zu höchster oder höchster zu niedrigster), habe ich einen $ reverse-Parameter (Standard: false) festgelegt, um die Reihenfolge zu ändern.

<?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);

?>

Ich hoffe, es hilft!

Vq.

3
Vidal Quevedo