Проверка, является ли родительская страница, есть ли у детей, есть ли у внуков

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, поэтому все еще пытаюсь понять, что можно, а что нельзя.

laura.f
источник

Ответы:

7

Перед прочтением решения, предоставленного Бравокейлом, я наконец методом проб и ошибок придумала решение, которое сработало для меня. Я не уверен, какой из них лучший или самый правильный, я знаю только то, что мой работал на меня, на мою проблему.

Это код, который я использовал для отображения макета полной ширины или макета бокового меню:

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
}
laura.f
источник
4
Level-0
--Level-1
----Level-2
------Level-3
----Levelanother-2
--Levelanother-1

проверить, является ли страница страницей верхнего уровня (она может иметь детей или нет)?

$post->$post_parent == 0или пусто get_post_ancestors( $post )возвращает только страницы уровня 0.

Это дочерняя страница и является ли она страницей 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
Большой! Вы нашли решение.
бравокейл