Theme-Datei für alle Seiten, die einer bestimmten Seite untergeordnet sind

Ist es möglich, innerhalb der aktuellen Namenshierarchie für Themendateien eine Vorlage für alle Seiten zu definieren, die einer bestimmten Seite untergeordnet sind? Zum Beispiel in dieser Navigation:

Über uns

  • Kontakt
  • Wer wir sind
  • Nachricht statement

Gibt es eine Möglichkeit, eine Designdatei mit folgendem Namen zu erstellen:

Seite-über-uns-alle.php

Das würde automatisch auf alle Seiten angewendet werden, die Kinder von Über uns sind?

AKTUALISIEREN

Ich ging mit einer modifizierten Version dessen, was Bainternet vorgeschlagen hatte. Hier ist die Nachfahrerrolle, mit der ich endete:

function is_descendant($ancestor, $tofind = 0) { global $post; if ($tofind == 0) $tofind = $post->ID; $arrpostids = get_post_ancestors($tofind); $arrpostslugs = array(); foreach($arrpostids as $postid) { $temppost = get_post($postid); array_push($arrpostslugs, $temppost->post_name); } return (in_array($ancestor, $arrpostids) || in_array($ancestor, $arrpostslugs)); } // Example use: is_descendant('about-us'); is_descendant(123); is_descendant('about-us', 134); 

Dadurch kann ich überprüfen, ob es sich um einen Nachkommen handelt, der entweder die ID des Eltern- oder des Slugs verwendet. Ich war besorgt, dass die Verwendung nur der ID zu einem Problem führen könnte, wenn eine übergeordnete Seite versehentlich zerstört wurde, es keinen guten Weg gibt, das wieder zum Laufen zu bringen, ohne die Design-Dateien bearbeiten zu müssen. Mit der Schnecke gibt es zumindest die Möglichkeit, einfach zu springen und eine neue Seite mit der gleichen Schnecke und Hierarchie zu erstellen.

Solutions Collecting From Web of "Theme-Datei für alle Seiten, die einer bestimmten Seite untergeordnet sind"

Ich habe eine handliche kleine benutzerdefinierte bedingte function, die die Arbeit für Sie erledigen würde.

Die function:

 function is_child_page($page = NULL){ global $post; if ($page == NULL){ $p = get_post($post->ID); if ($p->post_parent > 0 ){ return true; }else{ return false; } } $args = array( 'child_of' => (int)$page); $pages = get_pages($args); foreach ($pages as $p){ if ($p->ID == $post->ID){ return true; break; } } return false; } 

Verwendung:

 if (is_child_page()){ //this page has a parent page } if (is_child_page(23)){ //this page is a child page of the page with the ID of 23 } 

Jetzt fragst du, wie dir das helfen kann?

Nachdem Sie diese function in der functions.php-Datei Ihres Themes gespeichert haben, bearbeiten Sie die page.php Datei des page.php und fügen Sie ganz oben etwas wie page.php :

 if (is_child_page(12)){ include (TEMPLATEPATH . '/page-about-us-all.php'); exit(); } 

Und du bist fertig! Hinweis: In diesem Code wird davon ausgegangen, dass Ihre ungefähre Seiten-ID: 12 lautet und Ihre page-about-us-all.php heißt: page-about-us-all.php .

Dies kann viel einfacher sein und hängt nicht von separaten functionen ab.

Angenommen, wir möchten prüfen, ob die aktuelle Seite ein page.php von Seite 134 ist , reicht es aus, Folgendes in den oberen Bereich Ihrer page.php :

 < ?php if (134 == $post->post_parent) { include (TEMPLATEPATH . '/page-mysubpagetemplate.php'); // Name this for your child page template name exit(); } else { // Do something else // You might want to stick your regular page.php code in here, or alternatively, you could call another template }; ?> 

Dies ist standardmäßig im WordPress-Templating-System nicht möglich. Die Vorlagenhierarchie erkennt die Eltern-Kind-Seitenbeziehung nicht. Allerdings habe ich diesen Blogeintrag gefunden und eine Methode zur Automatisierung des processes erläutert. Ich habe nicht versucht, es zu implementieren, also verbürge ich mich nicht für seine Wirksamkeit, aber es ist zumindest eine Lektüre wert.

(Hinweis: Dieser Blog-Post bindet seine function in ‘save_post’ ein, was bedeutet, dass die Seitenvorlagenumschaltung nur dann erfolgt, wenn der Post gespeichert wird. Dies sollte im Allgemeinen funktionieren, da das Ändern der Parent-Seite eine Speicheraktion erfordert haken, wenn Sie rückwirkende Aktualisierungen von Seitenvorlagen durchführen müssen.)