it-swarm.com.de

Eine Überprüfung, ob es sich um eine übergeordnete Seite handelt, ob Kinder oder Enkelkinder vorhanden sind

Ich habe eine Standardseitenvorlage, die ich für zwei Szenarien verwenden möchte. Ich würde der Einfachheit halber für meinen Kunden nur eine Seitenvorlage verwenden.

Folgendes versuche ich zu erreichen:

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
}

Ist das möglich?

Das habe ich bisher versucht:

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

Es funktioniert so weit, als ob auf Top-Level-Seiten Layouts in voller Breite angezeigt werden. Aber was kann ich tun, um sicherzustellen, dass das Seitenleisten-Menü-Layout nur auf untergeordneten Seiten mit Kindern und auf Enkel-Seiten angezeigt wird? Und für untergeordnete Seiten ohne untergeordnete Seiten, um das Layout in voller Breite anzuzeigen.

Danke im Voraus. Ich bin sicher, es hat eine einfache Lösung, ich bin nur relativ neu in WP und versuche immer noch herauszufinden, was getan werden kann und was nicht.

10
laura.f

Bevor ich die Lösung las, stellte Bravokeyl fest, dass ich durch Versuch und Irrtum eine Lösung gefunden hatte, die für mich funktionierte. Ich bin mir nicht sicher, welcher der beiden besser oder der richtigste ist. Ich weiß nur, dass meiner für mich funktioniert hat, für das Problem, das ich hatte.

Dies ist der Code, den ich zum Anzeigen des Layouts in voller Breite oder des Seitenleisten-Menü-Layouts verwendet habe:

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

überprüfen Sie, ob es sich bei der Seite um eine Seite der obersten Ebene handelt (sie kann untergeordnete Elemente haben oder nicht).

$post->$post_parent == 0 oder ist leer get_post_ancestors( $post ) gibt nur Level-0-Seiten zurück.

Handelt es sich bei einer untergeordneten Seite um eine Seite der Ebene 1 oder nur um eine andere Seite der Ebene 1?

$post->$post_parent > 0 oder ist nicht leer get_post_ancestors( $post ) und ist leer get_post_ancestors( $post->post_parent )

Ist Level-1-Seite, hat aber keine Kinder wie Levelanother-1-Seite?

$post->$post_parent > 0 oder ist nicht leer get_post_ancestors( $post ) und ist leer get_post_ancestors( $post->post_parent ) und count(get_children( $post ->ID, 'ARRAY_A' )) == 0 ..

Ich habe das noch nicht überprüft, aber es sollte gut funktionieren. Sie können auch mit get_page_children () und get_posts () spielen.

4
bravokeyl