부모 페이지인지, 자녀가 있는지, 손자가 있는지 확인


10

두 가지 시나리오에 사용할 기본 페이지 템플릿이 하나 있습니다. 내 고객의 편의를 위해 하나의 페이지 템플릿 만 사용하고 싶습니다.

내가 성취하려고하는 것은 다음과 같습니다.

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
}

이것이 가능한가?

이것이 지금까지 시도한 것입니다.

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

최상위 페이지에서 작동하며 전체 너비 레이아웃을 표시합니다. 그러나 사이드 바 메뉴 레이아웃이 자식이있는 자식 페이지와 grandchile 페이지에만 표시되도록하려면 어떻게해야합니까? 자식이없는 자식 페이지의 경우 전체 너비 레이아웃을 표시합니다.

미리 감사드립니다. 나는 그것이 간단한 해결책을 가지고 있다고 확신한다. 나는 비교적 WP에 익숙하지 않기 때문에 여전히 할 수 있거나 할 수없는 것을 알아 내려고 노력하고있다.

답변:


7

Bravokeyl이 솔루션을 읽기 전에 마침내 시행 착오를 통해 나를 위해 일한 솔루션을 생각해 냈습니다. 나는 둘 중 어느 쪽이 더 낫거나 가장 정확한 것인지 잘 모르겠습니다.

이것은 전각 레이아웃 또는 사이드 바 메뉴 레이아웃을 표시하는 데 사용한 코드입니다.

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

페이지가 최상위 페이지인지 확인하십시오 (자식이있을 수 있음).

$post->$post_parent == 0또는 비어있는 get_post_ancestors( $post )경우 Level-0 Pages 만 반환합니다.

하위 페이지이며 Level-1 페이지 또는 Levelanother-1 전용입니까?

$post->$post_parent > 0또는 비어 있지 않은 get_post_ancestors( $post )비어있는get_post_ancestors( $post->post_parent )

레벨 1 페이지이지만 Levelanother-1 페이지와 같은 자식이 있습니까?

$post->$post_parent > 0비어 있지 않고 get_post_ancestors( $post )비어 get_post_ancestors( $post->post_parent ) 있고 count(get_children( $post ->ID, 'ARRAY_A' )) == 0..

나는 이것을 아직 확인하지 않았다. 그러나 그것은 잘 작동해야한다. get_page_children () 및 get_posts ()로 재생할 수도 있습니다.


bravokeyl 감사합니다. 그 해결책은 저에게 효과적이었습니다. 많은 시행 착오 (주로 오류) 후 나는 오늘 당신의 답장을 읽기 전에 내 자신의 해결책을 생각해 냈습니다. 아래에 게시하겠습니다.
laura.f

큰! 당신은 해결책을 찾았습니다.
bravokeyl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.