Un controllo per se è pagina genitore, se ha figli, se ha nipoti


10

Ho un modello di pagina predefinito che desidero utilizzare per due scenari. Preferirei usare solo un modello di pagina per semplicità per il mio cliente.

Ecco cosa sto cercando di realizzare:

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
}

È possibile?

Questo è quello che ho provato finora:

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

Funziona fino alle pagine di livello superiore, visualizza layout a larghezza intera. Ma cosa posso fare per assicurarmi che il layout del menu della barra laterale sia visualizzato su pagine figlio con bambini e solo su pagine grandchile? E per le pagine figlio senza figli, per visualizzare il layout a larghezza intera.

Grazie in anticipo. Sono sicuro che abbia una soluzione semplice, sono solo relativamente nuovo a WP, quindi sto ancora cercando di capire cosa può e non può essere fatto.

Risposte:


7

Prima di leggere la soluzione fornita da Bravokeyl, finalmente, attraverso prove ed errori, avevo trovato una soluzione che funzionava per me. Non sono sicuro di quale sia il migliore dei due, o il più corretto, so solo che il mio ha funzionato per me, per il problema che ho avuto.

Questo è il codice che ho usato per visualizzare il layout a larghezza intera o il menu del menu della barra laterale:

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

controlla se la pagina è di livello superiore (può avere figli o meno)?

$post->$post_parent == 0o è vuoto get_post_ancestors( $post )restituisce solo pagine di livello 0.

È una pagina figlio ed è solo una pagina di Livello 1 o Levelanother-1?

$post->$post_parent > 0o non è vuoto get_post_ancestors( $post )ed è vuotoget_post_ancestors( $post->post_parent )

È la pagina di livello 1 ma non ha figli come la pagina di livello 1?

$post->$post_parent > 0o non è vuoto get_post_ancestors( $post )ed è vuoto get_post_ancestors( $post->post_parent ) e count(get_children( $post ->ID, 'ARRAY_A' )) == 0..

Non ho ancora verificato questo ... ma dovrebbe funzionare bene. Puoi anche giocare con get_page_children () e get_posts ()


Grazie bravokeyl. Quella soluzione ha funzionato per me. Dopo un sacco di tentativi ed errori (principalmente errori), mi è venuta in mente una soluzione mia oggi prima di leggere la tua risposta. Lo posterò di seguito.
laura.f

Grande! hai trovato una soluzione.
bravokeyl,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.