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に比較的新しいですので、まだ何ができるかどうかわからないことを考えています。
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
}
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() で遊ぶこともできます。