Gibt es eine Möglichkeit, die $ post var außerhalb der Schleife zu definieren?

wordpress.stackexchange https://wordpress.stackexchange.com/questions/2363

  •  16-10-2019
  •  | 
  •  

Frage

Ich versuche, eine WordPress -Site zu beschleunigen, indem ich drei WP_Querien in einen in einer zusammenfasst. Ich muss Kategorien trennen, also tätige ich den Anruf und definiere 3 Arrays, um den Beitrag mit einem Switch zu halten, wie SO:

 $new_query = new WP_Query();
                $new_query->query('post_type=post&paged='.$paged);
                if ( $new_query->have_posts() ) : while ( $new_query->have_posts() ) : $new_query->the_post();              
                $category = choose_one_category(get_the_category());

                switch ($category){
                    case "Category 1":
                        $cat1[] = $post;
                        break;
                    case "Category 2":
                        $cat2[] = $post;
                        break;
                    case "Category 3":
                        $cat3[] = $post;
                        break;
                }


                endwhile; endif;

Was mich mit 3 Arrays hinterlässt, die mit den Pfosten schön sortiert sind. Jetzt möchte ich die variable $ post außerhalb der Schleife definieren, damit ich Methoden wie verwenden kann the_date() & comments_number() Kann jemand helfen, ohne diese Funktionen neu schreiben zu müssen?

Ich habe versucht:

                    foreach ($centre as $new_post){
                        $post = $new_post;

                                             include('front_page_loop.php');
                    } 

Wo front_page_loop.php ist mein Schleifencode, aber ich bekomme nur den gleichen Beitrag, wenn auch mit unterschiedlichen Daten

War es hilfreich?

Lösung

Ich finde setup_postdata($post) (interne) Funktion macht das. Ich habe es in Codex (typisch) nicht ordnungsgemäße Dokumentation dafür gefunden, aber hier und da gibt es Beispiele wie in Stellen Sie Beiträge mit einer benutzerdefinierten Abfrage anzeigen.

Dieser Test -Snippet scheint gut zu funktionieren, zum Beispiel Code, den Sie fraglich haben:

foreach ( $cat1 as $post ) {

    setup_postdata($post);
    printf( 'Post "%s" was posted %s ago<br />',
        get_the_title(),
        human_time_diff( strtotime( get_the_date() ) )
        );
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top