2012-12-17 6 views
17

Kann überprüft werden, ob es sich bei einer Seite um eine übergeordnete Seite handelt oder ob es sich um eine untergeordnete Seite handelt?Überprüfen Sie, ob es sich bei einer Seite um eine übergeordnete Seite handelt oder ob es sich um eine untergeordnete Seite handelt.

Ich habe meine Seiten wie folgt aufgebaut:

- Eltern

---- Kinder Seite 1

---- Kinder Seite 2

usw.

Ich möchte ein bestimmtes Menü anzeigen, wenn es eine übergeordnete Seite und ein anderes Menü ist, wenn es auf der untergeordneten Seite ist.

Ich weiß, dass ich etwas wie unten tun kann, aber ich möchte es ein bisschen dynamischer machen, ohne spezifische Seiten-IDs einzubeziehen.

<?php 
if ($post->post_parent == '100') { // if current page is child of page with page ID 100 
    // show image X 
} 
?> 
+0

Wie möchten Sie dann "Eltern" identifizieren? – Alex

+0

@alexjamesbrown Gibt es eine Möglichkeit, etwas wie 'is_parent' /' is_child' zu tun? – Rob

+0

Was nennst du Eltern? Nehmen Sie() das Kind in das Elternteil auf? Oder hast du irgendeine andere Art von Beziehung? Ist es nur eine Verzeichnisstruktur? – cheesemacfly

Antwort

39

Sie können testen, ob die Post eine Unterseite ist wie folgt:
* (von http://codex.wordpress.org/Conditional_Tags) *

<?php 

global $post;  // if outside the loop 

if (is_page() && $post->post_parent) { 
    // This is a subpage 

} else { 
    // This is not a subpage 
} 
?> 
+3

Warum das funktioniert - '$ post-> post_parent' enthält Integer mit Parent Post ID (Standard 0) - Standardwert bedeutet kein Elternteil. "0" in Bedingung wird als ** FALSE ** ausgewertet, andere Zahlen (> 0) werden als ** TRUE ** ausgewertet. –

3

Setzen Sie diese Funktion in der functions.php Datei Ihres Themas.

function is_page_child($pid) {// $pid = The ID of the page we're looking for pages underneath 
    global $post;   // load details about this page 
    $anc = get_post_ancestors($post->ID); 
    foreach($anc as $ancestor) { 
     if(is_page() && $ancestor == $pid) { 
      return true; 
     } 
    } 
    if(is_page()&&(is_page($pid))) 
    return true; // we're at the page or at a sub page 
    else 
     return false; // we're elsewhere 
}; 

Dann können Sie es verwenden:

<?php 
    if(is_page_child(100)) { 
     // show image X 
    } 
?> 
+0

mit "get_post_ancestors" können Sie sogar Enkelkinder Seiten für Level 1 Post-IDs überprüfen - dies half mir Kapitel-Body-Klassen und verschiedene CSS-Farben für verschiedene Level 1 Eltern/Großeltern! –

+0

'' ' Funktion themeName_body_class ($ classes) { $ classNames = array(); $ post = get_post(); $ eltern = get_post_ancestors ($ post); $ eltern [] = $ post-> ID; wenn (!leer ($ parents)) { foreach ($ parents als $ parentID) { if ($ parentID === 8) { $ classNames [] = 'mein-spezieller-klassenname'; } if ($ parentID === 11) { $ classNames [] = 'my-other-special-className'; } } } // echo var_dump ($ classes); return array_merge ($ classes, $ classNames); } add_filter ('body_class', 'themeName_body_class'); '' ' –

2

Ich weiß, dass dies eine alte Frage, aber ich wurde für diese gleiche Frage gesucht und konnte eine klare und einfache Antwort nicht finden, bis ich kam mit dieses. Meine Antwort beantwortet nicht seine Erklärung, aber sie beantwortet die Hauptfrage, wonach ich gesucht habe.

Dies überprüft, ob eine Seite ein untergeordnetes Element oder ein übergeordnetes Element ist. Sie können z. B. ein Seitenleistenmenü nur auf Seiten anzeigen, die entweder untergeordnet oder übergeordnet sind, und nicht auf Seiten ohne übergeordnete oder untergeordnete Seiten .

Verwandte Themen