Controllare se è una pagina genitore, se ha figli o nipoti

23 mar 2015, 18:04:37
Visualizzazioni: 23.5K
Voti: 10

Ho un template di pagina predefinito che vorrei utilizzare per due scenari diversi. Preferirei utilizzare un solo template di pagina per mantenere la semplicità per il mio cliente.

Ecco cosa sto cercando di realizzare:

if pagina_genitore O se pagina_figlia senza figli {
  mostra layout_larghezza_piena
}
if pagina_figlia con figli o se pagina_nipote {
  mostra layout_menu_laterale
}

È possibile?

Questo è quello che ho provato finora:

if( is_page() && $post->post_parent > 0 ) {
  //mostra layout_menu_laterale
} else {
  //mostra layout_larghezza_piena
}

Funziona finora per le pagine di primo livello, dove viene visualizzato il layout a larghezza piena. Ma come posso fare per assicurarmi che il layout con menu laterale venga visualizzato solo nelle pagine figlie che hanno figli e nelle pagine nipoti? E per le pagine figlie senza figli, mostrare il layout a larghezza piena?

Grazie in anticipo. Sono sicuro che ci sia una soluzione semplice, sono solo relativamente nuovo in WordPress quindi sto ancora cercando di capire cosa si può e non si può fare.

0
Tutte le risposte alla domanda 2
0

Prima di leggere la soluzione proposta da Bravokeyl, dopo vari tentativi ed errori, ero finalmente riuscito a trovare una soluzione che funzionasse per il mio caso. Non so dire quale delle due sia migliore o più corretta, so solo che la mia ha funzionato per il problema che avevo.

Questo è il codice che ho utilizzato per mostrare un layout a tutta larghezza o con sidebar-menu:

if( is_page() && $post->post_parent > 0 ) { 
  // il post ha genitori

  $children = get_pages('child_of='.$post->ID);
  if( count( $children ) != 0 ) {
    // mostra layout con sidebar-menu
  }

  $parent = get_post_ancestors($post->ID);
  if( count( $children ) <= 0  && empty($parent[1]) ) {
    // mostra layout a tutta larghezza
  } elseif ( count( $children ) <= 0  && !empty($parent[1]) )  {
    // mostra layout con sidebar-menu
  }

} else {
  // il post non ha genitori
  // mostra layout a tutta larghezza
}
25 mar 2015 23:12:45
2
Livello-0
--Livello-1
----Livello-2
------Livello-3
----Livelloaltro-2
--Livelloaltro-1

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

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

È una pagina figlia ed è una pagina di Livello-1 o Livelloaltro-1 solamente?

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

È una pagina level-1 ma non ha figli come la pagina Livelloaltro-1?

$post->$post_parent > 0 o 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()

23 mar 2015 22:16:33
Commenti

Grazie bravokeyl. Quella soluzione ha funzionato per me. Dopo molti tentativi ed errori (principalmente errori) ho trovato una mia soluzione oggi prima di leggere la tua risposta. La posterò qui sotto.

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

Fantastico! Hai trovato la soluzione.

bravokeyl bravokeyl
26 mar 2015 00:35:38