Cek untuk apakah ini halaman induk, jika punya anak, jika punya cucu

10

Saya memiliki satu templat halaman default yang ingin saya gunakan untuk dua skenario. Saya lebih suka menggunakan hanya satu templat halaman demi kesederhanaan untuk klien saya.

Inilah yang saya coba capai:

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
}

Apakah ini mungkin?

Inilah yang saya coba sejauh ini:

if( is_page() && $post->post_parent > 0 ) {
  //display sidebar-menu-layout
} else {
  //display full-width-layout
}

Ini berfungsi sejauh pada halaman tingkat atas, ini menampilkan tata letak lebar penuh. Tapi, apa yang bisa saya lakukan untuk memastikan bahwa tata letak menu-sidebar ditampilkan pada halaman anak-anak dengan anak-anak dan pada halaman-halaman grandchile saja? Dan untuk halaman anak tanpa anak, untuk menampilkan tata letak lebar penuh.

Terima kasih sebelumnya. Saya yakin ini memiliki solusi sederhana, saya hanya relatif baru di WP jadi masih mencoba mencari tahu apa yang bisa dan tidak bisa dilakukan.

laura.f
sumber

Jawaban:

7

Sebelum membaca solusi Bravokeyl asalkan saya akhirnya, melalui trial and error, datang dengan solusi yang bekerja untuk saya. Saya tidak yakin mana yang lebih baik dari keduanya, atau yang paling benar, saya hanya tahu bahwa milik saya bekerja untuk saya, untuk masalah yang saya miliki.

Ini adalah kode yang saya gunakan untuk menampilkan tata letak lebar penuh atau tata letak menu sidebar:

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
sumber
4
Level-0
--Level-1
----Level-2
------Level-3
----Levelanother-2
--Levelanother-1

periksa apakah halaman adalah halaman tingkat atas (mungkin memiliki anak atau tidak)?

$post->$post_parent == 0atau kosong get_post_ancestors( $post )hanya mengembalikan Level-0 Halaman.

Apakah halaman anak dan hanya halaman Level-1 atau Levelanother-1 saja?

$post->$post_parent > 0atau tidak kosong get_post_ancestors( $post )dan kosongget_post_ancestors( $post->post_parent )

Apakah halaman level-1 tetapi tidak memiliki anak seperti Levelanother-1 halaman?

$post->$post_parent > 0atau tidak kosong get_post_ancestors( $post )dan kosong get_post_ancestors( $post->post_parent ) dan count(get_children( $post ->ID, 'ARRAY_A' )) == 0..

Saya belum memeriksa ini..tapi itu akan berfungsi dengan baik. Anda juga dapat bermain dengan get_page_children () dan get_posts ()

bravokeyl
sumber
Terima kasih bravokeyl. Solusi itu berhasil untuk saya. Setelah banyak trial and error (terutama kesalahan) saya datang dengan solusi saya sendiri hari ini sebelum saya membaca balasan Anda. Saya akan mempostingnya di bawah.
laura.f
Bagus! Anda telah menemukan solusinya.
bravokeyl