Verificare pentru pagină părinte, dacă are copii sau nepoți

23 mar. 2015, 18:04:37
Vizualizări: 23.5K
Voturi: 10

Am un șablon de pagină implicit pe care doresc să îl folosesc pentru două scenarii. Aș prefera să folosesc un singur șablon de pagină pentru simplitate în ceea ce privește clientul meu.

Iată ce încerc să realizez:

if pagină_părinte SAU dacă pagină_copil fără copii {
  afișează layout_full_width
}
if pagină_copil cu copii sau dacă pagină_nepot {
  afișează layout_cu_sidebar_meniu
}

Este posibil acest lucru?

Iată ce am încercat până acum:

if( is_page() && $post->post_parent > 0 ) {
  //afișează layout_cu_sidebar_meniu
} else {
  //afișează layout_full_width
}

Funcționează până acum pentru paginile de nivel superior, afișând layout-ul full-width. Dar ce pot face pentru a mă asigura că layout-ul cu sidebar-meniu este afișat doar pe paginile copil care au copii și pe paginile nepot? Și pentru paginile copil fără copii, să afișeze layout-ul full-width.

Mulțumesc anticipat. Sunt sigur că există o soluție simplă, sunt doar relativ nou în WordPress așa că încă încerc să-mi dau seama ce se poate și ce nu se poate face.

0
Toate răspunsurile la întrebare 2
0

Înainte de a citi soluția oferită de Bravokeyl, am reușit în cele din urmă, prin încercări și erori, să găsesc o soluție care a funcționat pentru mine. Nu sunt sigur care dintre ele este mai bună sau mai corectă, știu doar că a mea a funcționat pentru problema pe care o aveam.

Acesta este codul pe care l-am folosit pentru a afișa layout-ul pe toată lățimea sau layout-ul cu bara laterală:

if( is_page() && $post->post_parent > 0 ) { 
  // postul are părinți

  $children = get_pages('child_of='.$post->ID);
  if( count( $children ) != 0 ) {
    // afișează layout cu bara laterală
  }

  $parent = get_post_ancestors($post->ID);
  if( count( $children ) <= 0  && empty($parent[1]) ) {
    // afișează layout pe toată lățimea
  } elseif ( count( $children ) <= 0  && !empty($parent[1]) )  {
    // afișează layout cu bara laterală
  }

} else {
  // postul nu are părinți
  // afișează layout pe toată lățimea
}
25 mar. 2015 23:12:45
2
Level-0
--Level-1
----Level-2
------Level-3
----Levelanother-2
--Levelanother-1

verifică dacă pagina este o pagină de nivel superior (poate avea sau nu copii)?

$post->$post_parent == 0 sau este gol get_post_ancestors( $post ) returnează doar paginile Level-0.

Este o pagină copil și este doar o pagină Level-1 sau Levelanother-1?

$post->$post_parent > 0 sau nu este gol get_post_ancestors( $post ) și este gol get_post_ancestors( $post->post_parent )

Este o pagină level-1 dar nu are copii ca pagina Levelanother-1?

$post->$post_parent > 0 sau nu este gol get_post_ancestors( $post ) și este gol get_post_ancestors( $post->post_parent ) și count(get_children( $post->ID, 'ARRAY_A' )) == 0..

Nu am testat acest lucru încă..dar ar trebui să funcționeze corect. Poți experimenta și cu get_page_children() și get_posts()

23 mar. 2015 22:16:33
Comentarii

Mulțumesc bravokeyl. Această soluție a funcționat pentru mine. După multe încercări și erori (în special erori) am găsit o soluție proprie mai devreme astăzi, înainte să citesc răspunsul tău. O voi posta mai jos.

laura.f laura.f
25 mar. 2015 22:58:44

Grozav! ai găsit soluția.

bravokeyl bravokeyl
26 mar. 2015 00:35:38