Sie müssen diese Beiträge durchlaufen und dann für jeden Beitrag weitere Abfragen durchführen. Dies wird wiederholt, bis Sie keine Beiträge in einer Abfrage finden.
z.B
function get_posts_children($parent_id){
$children = array();
// grab the posts children
$posts = get_posts( array( 'numberposts' => -1, 'post_status' => 'publish', 'post_type' => 'microsite', 'post_parent' => $parent_id, 'suppress_filters' => false ));
// now grab the grand children
foreach( $posts as $child ){
// recursion!! hurrah
$gchildren = get_posts_children($child->ID);
// merge the grand children into the children array
if( !empty($gchildren) ) {
$children = array_merge($children, $gchildren);
}
}
// merge in the direct descendants we found earlier
$children = array_merge($children,$posts);
return $children;
}
// example of using above, lets call it and print out the results
$descendants = get_posts_children($post->ID);
echo '<pre>';
print_r($descendants);
echo '</pre>';
Ja, die obige Funktion ruft sich selbst auf, es ist eine rekursive Funktion. Es ruft sich so lange selbst auf, bis es bis zu einem Punkt reicht, an dem der betrachtete Beitrag keine Kinder mehr hat. Dann kehrt es zurück, ohne sich selbst aufzurufen, und der gesamte Stapel sprudelt zurück, um die Anzahl der Kinder aufzubauen. Sie würden gut daran tun, weitere Forschungen in diesem Bereich durchzuführen.
Beachten Sie, dass das, was Sie möchten, inhärente Kosten verursacht, unabhängig davon, ob Sie rekursive Funktionen verwenden oder nicht, die davon abhängen, wie viele Ebenen von Posts Sie haben. 5 Ebenen von Posts sind teurer als 2 und es handelt sich nicht um eine lineare Skalierung. Je nachdem, wie Sie dies tun, möchten Sie möglicherweise Transienten verwenden, um Ihre Ausgabe zwischenzuspeichern.
Eine andere Möglichkeit, die Kosten zu senken, besteht darin, nur eine bestimmte Anzahl von Ebenen nach unten zu schauen, z. B. Enkelkinder, aber keine Urenkel. Dies kann erreicht werden, indem ein Tiefenparameter übergeben und bei jedem rekursiven Aufruf dekrementiert wird. Stellen Sie dabei sicher, dass zu Beginn ein leeres Array zurückgegeben wird, wenn die Tiefe 0 oder weniger beträgt. Viele Tutorials zu rekursiven Funktionen verwenden dies als Beispiel.
Einfach benutzen
get_page_children()
. Es funktioniert für jeden Beitragstyp (nicht nur für Seiten) und ist im Grunde das, was @TomJNowell in der anderen Frage gezeigt hat, aber bereits vom Kern implementiert.Das obige Beispiel ist wie im Codex. Aus diesem Grund können Sie einfach das globale Abfrageobjekt (oder ein anderes Abfrageobjekt) als Suchbasis verwenden.
quelle
Verwenden Sie den nächsten Shortcode, um alle Kinder und Enkelkinder in einer hierarchischen Ansicht anzuzeigen. Verwendung: [my_children_list] oder [my_children_list page_id = 123]
quelle