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

10

J'ai un modèle de page par défaut que je souhaite utiliser pour deux scénarios. Je préfère 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 dans la mesure où sur les pages de niveau supérieur, il affiche des mises en page pleine largeur. Mais, que puis-je faire pour m'assurer que la disposition du menu de la barre latérale ne s'affiche que sur les pages enfants avec enfants et sur les pages de petits-enfants uniquement? Et pour les pages enfants sans enfants, pour afficher la mise en page pleine largeur.

Merci d'avance. Je suis sûr qu'il a une solution simple, je suis relativement nouveau pour WP, donc j'essaie toujours de comprendre ce qui peut et ne peut pas être fait.

laura.f
la source

Réponses:

7

Avant de lire la solution, Bravokeyl a fourni que j'avais finalement, par essais et erreurs, trouvé une solution qui fonctionnait pour moi. Je ne sais pas quel 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.

Voici le code que j'ai utilisé pour afficher la disposition pleine largeur ou la disposition 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
}
laura.f
la source
4
Level-0
--Level-1
----Level-2
------Level-3
----Levelanother-2
--Levelanother-1

vérifier si la page est une page de niveau supérieur (elle peut avoir des enfants ou non)?

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

Est-ce une page enfant et une page de niveau 1 ou de niveau 1 uniquement?

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

Est-ce que la page de niveau 1 mais n'a pas d'enfants comme la page Levelanother-1?

$post->$post_parent > 0ou 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 cela devrait fonctionner correctement. Vous pouvez également jouer avec get_page_children () et get_posts ()

bravokeyl
la source
Merci bravokeyl. Cette solution a fonctionné pour moi. Après de nombreux essais et erreurs (principalement des erreurs), j'ai trouvé ma propre solution plus tôt dans la journée avant de lire votre réponse. Je posterai cela ci-dessous.
laura.f
Génial! vous avez trouvé la solution.
bravokeyl