Sprawdź, czy strona jest nadrzędna, jeśli ma dzieci, jeśli ma wnuki


10

Mam jeden domyślny szablon strony, którego chcę używać w dwóch scenariuszach. Wolę używać tylko jednego szablonu strony dla uproszczenia dla mojego klienta.

Oto, co próbuję osiągnąć:

if parent_page OR if child-page without children {
  display full-width-layout
}
if child page with children or if grandchild page {
  display sidebar-menu-layout
}

czy to możliwe?

Do tej pory próbowałem:

if( is_page() && $post->post_parent > 0 ) {
  //display sidebar-menu-layout
} else {
  //display full-width-layout
}

Działa tak daleko, jak na stronach najwyższego poziomu, wyświetla układy o pełnej szerokości. Ale co mogę zrobić, aby upewnić się, że układ menu paska bocznego jest wyświetlany na stronach potomnych z dziećmi i tylko na stronach wnuka? A dla stron podrzędnych bez dzieci, aby wyświetlić układ o pełnej szerokości.

Z góry dziękuję. Jestem pewien, że ma proste rozwiązanie, jestem stosunkowo nowy w WP, więc wciąż próbuję dowiedzieć się, co można, a czego nie można zrobić.

Odpowiedzi:


7

Przed przeczytaniem rozwiązania Bravokeyl pod warunkiem, że wreszcie, metodą prób i błędów, opracowałem rozwiązanie, które działało dla mnie. Nie jestem pewien, która z nich jest lepsza lub najbardziej poprawna, wiem tylko, że moja działała dla mnie, z powodu mojego problemu.

Oto kod, którego użyłem do wyświetlenia układu o pełnej szerokości lub układu menu na pasku bocznym:

if( is_page() && $post->post_parent > 0 ) { 
  // post has parents

  $children = get_pages('child_of='.$post->ID);
  if( count( $children ) != 0 ) {
    // display sidebar-menu layout
  }

  $parent = get_post_ancestors($post->ID);
  if( count( $children ) <= 0  && empty($parent[1]) ) {
    // display full-width layout
  } elseif ( count( $children ) <= 0  && !empty($parent[1]) )  {
    // display sidebar-menu layout
  }

} else {
  // post has no parents
  // display full-width layout
}

4
Level-0
--Level-1
----Level-2
------Level-3
----Levelanother-2
--Levelanother-1

sprawdź, czy strona jest stroną najwyższego poziomu (może mieć dzieci, czy nie)?

$post->$post_parent == 0lub jest pusty get_post_ancestors( $post )zwraca tylko strony poziomu 0.

Czy jest to strona podrzędna i jest to tylko strona poziomu 1 lub poziom 1 innej?

$post->$post_parent > 0lub nie jest pusty get_post_ancestors( $post )i jest pustyget_post_ancestors( $post->post_parent )

Czy strona jest na poziomie 1, ale nie ma dzieci takich jak strona na poziomie 1?

$post->$post_parent > 0lub nie jest pusty get_post_ancestors( $post )i jest pusty get_post_ancestors( $post->post_parent ) i count(get_children( $post ->ID, 'ARRAY_A' )) == 0...

Jeszcze tego nie sprawdziłem .. ale powinno działać dobrze. Możesz także grać z get_page_children () i get_posts ()


Dziękuję Brawokeyl. To rozwiązanie działało dla mnie. Po wielu próbach i błędach (głównie błąd) wymyśliłem dziś swoje własne rozwiązanie, zanim przeczytałem twoją odpowiedź. Zamieszczę to poniżej.
laura.f

Świetny! znalazłeś rozwiązanie.
bravokeyl,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.