2012-12-17 13 views
17

Czy można sprawdzić, czy strona jest rodzicem, czy jest to strona podrzędna?Sprawdź, czy strona jest rodzicem, czy jest to strona podrzędna?

Mam stron skonfigurować tak:

- Parent

---- stronę Dziecko 1

---- stronę Dziecko 2

itp

Chcę wyświetlić określone menu, jeśli jest to strona nadrzędna i inne menu, jeśli jest na stronie podrzędnej.

Wiem, że mogę zrobić coś podobnego, ale chcę, aby było bardziej dynamiczne bez uwzględniania określonych identyfikatorów stron.

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

Jak chcesz zidentyfikować "rodzica"? – Alex

+0

@alexjamesbrown Czy istnieje sposób na zrobienie czegoś takiego jak 'is_parent' /' is_child'? – Rob

+0

Co nazywasz rodzicem? Czy dołączasz() dziecko do rodzica? Czy masz jakiś inny rodzaj relacji? Czy to tylko struktura katalogów? – cheesemacfly

Odpowiedz

39

można przetestować jeśli post jest podstrona tak:
* (od 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

Dlaczego to działa - '$ post-> post_parent' zawiera liczbę całkowitą z Parent Post ID (domyślnie 0) - domyślna wartość oznacza brak rodzica. "0" w warunku jest oceniane jako ** FALSE **, inne liczby (> 0) są oceniane jako ** TRUE **. –

3

Put tej funkcji w pliku functions.php swojego tematu.

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

Następnie można go używać:

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

z użyciem "get_post_ancestors" możesz sprawdzić nawet strony grand children dla pierwszego poziomu post-ids - pomogło mi to w stworzeniu klas body-rozdziału i różnych kolorów css dla różnych rodziców na poziomie 1/grand rodziców! –

+0

'' ' function themeName_body_class ($ classes) { $ classNames = array(); $ post = get_post(); $ parents = get_post_ancestors ($ post); $ parents [] = $ post-> ID; jeśli (!pusty ($ rodzice)) { foreach ($ parents jako $ parentID) { if ($ parentID === 8) { $ classNames [] = 'moja-specjalna-klasa-nazwa'; } if ($ parentID === 11) { $ classNames [] = "moja-inna-specjalna-klasa"; } } } // echo var_dump ($ classes); return array_merge ($ classes, $ classNames); } add_filter ('body_class', 'themeName_body_class'); '' ' –

2

wiem, że to jest stare pytanie, ale szukałem tej samej kwestii i nie mógł znaleźć jasnej i prostej odpowiedzi, dopóki nie wpadł ten. Moja odpowiedź nie odpowiada na jego wyjaśnienia, ale odpowiada na główne pytanie, którego szukałem.

Sprawdza, czy strona jest dzieckiem lub rodzicem i pozwala pokazać, na przykład menu paska bocznego, tylko na stronach, które są albo dzieckiem lub rodzicem, a nie na stronach, które nie mają rodzica ani dzieci .

<?php 
    global $post;  
    $children = get_pages(array('child_of' => $post->ID)); 
    if (is_page() && ($post->post_parent || count($children) > 0 )) : 
?> 
Powiązane problemy