Une vérification de si est la page parent, si a des enfants, si a des petits-enfants

9

Je souhaite utiliser un modèle de page par défaut pour deux scénarios. Je préférerais utiliser un seul modèle de page par souci de simplicité pour mon client.

Voici ce que j'essaie d'accomplir:

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
}

Est-ce possible?

Voici ce que j'ai essayé jusqu'à présent:

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

Cela fonctionne aussi bien que sur les pages de niveau supérieur, il affiche des dispositions en pleine largeur. Mais que puis-je faire pour m'assurer que la disposition de menu de barre latérale est affichée sur les pages enfants avec des enfants et sur les pages grandchiles uniquement? Et pour les pages enfants sans enfants, afficher la mise en page pleine largeur.

Merci d'avance. Je suis sûr que la solution est simple. Je suis relativement nouveau dans WP, donc je tente toujours de comprendre ce qui peut ou ne peut pas être fait.

    
posée laura.f 23.03.2015 - 17:04

2 réponses

6

Avant de lire la solution fournie par Bravokeyl, j’avais finalement trouvé, par essais et erreurs, une solution qui fonctionnait pour moi. Je ne suis pas sûr de ce qui est le meilleur des deux, ou le plus correct, je sais seulement que le mien a fonctionné pour moi, pour le problème que j'avais.

Il s’agit du code que j’ai utilisé pour afficher les modèles pleine largeur ou ceux du menu de la barre latérale:

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
}
    
réponse donnée laura.f 25.03.2015 - 22:12
4
Level-0
--Level-1
----Level-2
------Level-3
----Levelanother-2
--Levelanother-1

vérifie si la page est au premier niveau (elle peut avoir des enfants ou non)?

$post->$post_parent == 0 ou est vide get_post_ancestors( $post ) renvoie uniquement les pages de niveau 0.

S'agit-il d'une page enfant et d'une page de niveau 1 ou de Levelanother-1 uniquement?

$post->$post_parent > 0 ou n'est pas vide get_post_ancestors( $post ) et est vide get_post_ancestors( $post->post_parent )

La page contient-elle le niveau 1 mais les enfants ne sont-ils pas comme la page Levelanother-1?

$post->$post_parent > 0 ou n'est pas vide get_post_ancestors( $post ) et est vide get_post_ancestors( $post->post_parent ) et count(get_children( $post ->ID, 'ARRAY_A' )) == 0 ..

Je n'ai pas encore vérifié cela..mais ça devrait bien fonctionner. Vous pouvez également jouer avec get_page_children () et get_posts ()

.     
réponse donnée bravokeyl 23.03.2015 - 21:16

Lire d'autres questions sur les étiquettes