检查是否是父页面,是否有孩子,是否有孙子


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来说我才刚刚起步,所以仍在尝试找出可以做什么和不能做什么。

Answers:


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级页面。

是子页面,仅是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()


谢谢你bravookeyl。该解决方案对我有用。经过大量的反复试验(主要是错误),我在今天早些时候想出了自己的解决方案,然后再阅读您的答复。我将在下面发布。
laura.f,2015年

大!您已找到解决方案。
bravokeyl
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.