親ページかどうか、子供がいるかどうか、孫がいるかどうかのチェック


10

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
}

トップレベルのページまで機能し、全幅レイアウトを表示します。しかし、サイドバーメニューレイアウトが子を持つ子ページと祖父ページのみに表示されるようにするにはどうすればよいですか?また、子のない子ページの場合は、全幅レイアウトを表示します。

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

回答:


7

Bravokeylが提供したソリューションを読む前に、試行錯誤を繰り返して、私に役立つソリューションを思いついた。2つのうちどちらが優れているか、または最も正しいかどうかはわかりませんが、私の問題が解決したので、私の場合はうまくいきました。

これは、全幅レイアウトまたはサイドバーメニューレイアウトを表示するために使用したコードです。

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 == 0or is is empty get_post_ancestors( $post )は、Level-0 Pagesのみを返します。

子ページであり、レベル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()で遊ぶこともできます


ブラボーケイルありがとうございます。その解決策は私にとってうまくいきました。多くの試行錯誤(主にエラー)の後で、私はあなたの返事を読む前に、今日より早く自分自身の解決策を思いつきました。以下に掲載します。
laura.f 2015年

すごい!あなたは解決策を見つけました。
bravokeyl 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.