web-dev-qa-db-fra.com

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

J'ai un modèle de page par défaut que je souhaite utiliser 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?

C'est 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 à WP et j'essaie donc de déterminer ce qui peut ou ne peut pas être fait.

10
laura.f

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'ai eu.

C'est le code que j'ai utilisé pour afficher une mise en page pleine largeur ou une mise en page de menu de 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
}
7
laura.f
Level-0
--Level-1
----Level-2
------Level-3
----Levelanother-2
--Levelanother-1

vérifier si la page est en haut de la page (elle peut avoir des enfants ou pas)?

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

Une page enfant est-elle une page de niveau 1 ou 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 )

Est-ce la page de niveau 1 mais les enfants ne sont 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 marcher. Vous pouvez également jouer avec get_page_children () et get_posts ()

4
bravokeyl