it-swarm.com.de

Sortieren Sie die Beiträge nach dem neuesten Kind, während die Hierarchie intakt bleibt

Ich habe die folgende Hierarchie in meinen WordPress-Posts (z. B.):

-> Post 1 (pubdate: 2011-01-01)
 --> Post 5 (pubdate: 2011-01-02)
  ---> Post 6 (pubdate: 2011-01-03)
   ----> Post 7 (pubdate: 2011-01-04)

-> Post 2 (pubdate: 2011-03-01)
 --> Post 8 (pubdate: 2011-03-02)

-> Post 3 (pubdate: 2011-02-01)
 --> Post 9 (pubdate: 2011-02-02)
  ---> Post 10 (pubdate: 2011-02-03)

-> Post 4 (pubdate: 2011-04-01)

Was ich jetzt erreichen möchte, ist, die Elternbeiträge nach dem Veröffentlichungsdatum des jeweils neuesten Kindbeitrags zu sortieren. Wichtig ist, dass die Hierarchie intakt bleibt. Dies würde im Beispiel zu folgender Reihenfolge führen (von der neuesten zur ältesten):

-> Post 4 (pubdate: 2011-04-01)

-> Post 2 (pubdate: 2011-03-01)
 --> Post 8 (pubdate: 2011-03-02)

-> Post 3 (pubdate: 2011-02-01)
 --> Post 9 (pubdate: 2011-02-02)
  ---> Post 10 (pubdate: 2011-02-03)

-> Post 1 (pubdate: 2011-01-01)
 --> Post 5 (pubdate: 2011-01-02)
  ---> Post 6 (pubdate: 2011-01-03)
   ----> Post 7 (pubdate: 2011-01-04)

Irgendeine Idee, wie ich das zum Laufen bringen kann? Vielen Dank!

BEARBEITEN: Ich habe den folgenden Teil hinzugefügt, basierend auf der Frage von Rarst, wie ich die Struktur abrufe.

Ich rufe die Posts mit der folgenden Abfrage ab:

$args = array(
  'cat' => 7,
  'post_type' => 'articles', 
  'orderby' => 'post_date', 
  'posts_per_page' => -1, 
  'order' => 'DESC' 
); 
$records = get_posts($args);
foreach($records as $post) {
  get_template_part( 'index', 'article' );
}

Mit dieser Funktion überprüfe ich dann, wie viele Eltern ein Artikel hat ...

// count amount of parents of a post
function usr_count_children($cid) {
  $childrenArray = count(get_pages("post_type=articles&child_of=".$cid));
  return $childrenArray;
}

... und fügen Sie die zurückgegebene Nummer als CSS-Klasse zum HTML-Element des Artikels hinzu (das dann basierend darauf gestaltet wird).

EDIT 2:

Ok, das habe ich bisher:

    $parentPosts = get_posts(array(
    'cat' => 7, 
    'post_type' => 'articles',
    'post_status' => 'publish',
    'post_parent' => 0, 
    'posts_per_page' => -1,
    'orderby' => 'post_date',
    'order' => 'DESC' ));

foreach ($parentPosts as $post){

    echo "+ ".$post->post_title." ID: ".$post->ID."<br/>";

    // Look up newest child (query, sort by date, limit to one)
    $newestChild = get_pages(array(
        'child_of' => $post->ID,
        'post_type' => 'articles',
        'post_status' => 'publish',
        'sort_column' => 'post_date',
        'sort_order' => 'DESC',
        'number' => 1 ));

    foreach($newestChild as $child){
        echo "– ".$child->post_title." ID: ".$child->ID."<br/>";
    }
}

Ich stecke bei der zweiten Abfrage fest (neuestes Kind erhalten), es werden keine Kinder zurückgegeben, es sei denn, ich entferne 'number' => 1. Ich habe wirklich ein paar Dinge ausprobiert (z. B. WP_Query, ich habe sogar rohe SQL-Abfragen ausprobiert), aber ich kann es nicht verstehen. Jemand?

2
user648519

Wie können Sie diese Struktur abrufen und an erster Stelle wiedergeben?

Ich glaube nicht, dass Sie so etwas abfragen können (ohne bösartiges SQL), daher wäre es wahrscheinlich einfacher:

  1. Übergeordnete Beiträge abrufen.
  2. Suchen Sie nach dem neuesten Kind (Abfrage, Sortieren nach Datum, Beschränkung auf eins).
  3. Ordnen Sie die übergeordneten Beiträge entsprechend neu an.
1
Rarst