web-dev-qa-db-ja.com

親ページかどうか、子があるかどうか、孫がいるかどうかの確認

2つのシナリオで使用したいデフォルトのページテンプレートが1つあります。私は私のクライアントのために簡単にするためにただ1つのページテンプレートを使うのが好きです。

これが私が達成しようとしていることです:

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
}

これはトップレベルのページでは動作し、全幅のレイアウトを表示します。しかし、sidebar-menu-layoutが子供のいる子供ページと孫ページだけに表示されるようにするにはどうすればいいですか?また、子のない子ページの場合は、全角レイアウトを表示します。

前もって感謝します。私はそれが簡単な解決策を持っていると確信しています、私はWPに比較的新しいですので、まだ何ができるかどうかわからないことを考えています。

10
laura.f

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
}
7
laura.f
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() で遊ぶこともできます。

4
bravokeyl