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


10

Ich habe eine Standardseitenvorlage, die ich für zwei Szenarien verwenden möchte. Der Einfachheit halber würde ich es vorziehen, nur eine Seitenvorlage für meinen Kunden zu 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?

Folgendes habe ich bisher versucht:

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

Es funktioniert so weit wie auf Seiten der obersten Ebene, es zeigt Layouts in voller Breite. Aber was kann ich tun, um sicherzustellen, dass das Seitenleisten-Menü-Layout nur auf untergeordneten Seiten mit Kindern und auf Grandchile-Seiten angezeigt wird? Und für untergeordnete Seiten ohne untergeordnete Elemente, um das Layout in voller Breite anzuzeigen.

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

Antworten:


7

Bevor ich die Lösung las, die Bravokeyl zur Verfügung stellte, hatte ich endlich durch Versuch und Irrtum eine Lösung gefunden, die für mich funktionierte. Ich bin mir nicht sicher, welches das bessere oder das richtigste ist. Ich weiß nur, dass meins für mich funktioniert hat, für das Problem, das ich hatte.

Dies ist der Code, mit dem ich das Layout in voller Breite oder das Seitenleistenmenü angezeigt 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
}

4
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 Seiten haben oder nicht).

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

Ist eine untergeordnete Seite und nur eine Seite der Stufe 1 oder nur eine andere Seite?

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

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

$post->$post_parent > 0oder 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.


Vielen Dank, Bravokeyl. Diese Lösung hat bei mir funktioniert. Nach vielen Versuchen und Irrtümern (hauptsächlich Irrtümern) habe ich heute früher eine eigene Lösung gefunden, bevor ich Ihre Antwort gelesen habe. Ich werde das unten posten.
Laura.f

Groß! Sie haben eine Lösung gefunden.
Bravokeyl
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.