Перевірка, чи є батьківська сторінка, чи є діти, чи є онуки


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
}

Він працює так само, як на сторінках верхнього рівня, показує макети повної ширини. Але що я можу зробити, щоб переконатися, що макет меню бічної панелі відображається на дочірніх сторінках з дітьми та лише на сторінках грандхілу? А для дочірніх сторінок, у яких немає дітей, відображати макет повної ширини.

Заздалегідь спасибі. Я впевнений, що це просте рішення, я просто порівняно з новими 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 )повертає лише сторінки рівня 0.

Є дочірньою сторінкою і це лише рівень 1-го рівня або лише рівень 1-го рівня?

$post->$post_parent > 0або не порожній get_post_ancestors( $post )і порожнійget_post_ancestors( $post->post_parent )

Сторінка 1-го рівня, але не має дітей, як Levelagether-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 ()


Дякую бравокейлу. Це рішення працювало на мене. Після безлічі спроб і помилок (головним чином помилок) я придумав своє власне рішення раніше, перш ніж прочитати вашу відповідь. Я опублікую це нижче.
laura.f

Чудово! ви знайшли рішення.
bravokeyl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.