Wann sollten Sie wp_reset_postdata vs wp_reset_query verwenden?

Scheint so, als ob die Hälfte der Tutorials im Codex wp_reset_postdata() und halb wp_reset_query() . Was ist das Problem? Vielleicht beide benutzen? Was ist mit rewind_posts() ? Ich bitte um eine Antwort, die auf Fakten basiert , nicht auf Meinungen.

Solutions Collecting From Web of "Wann sollten Sie wp_reset_postdata vs wp_reset_query verwenden?"

wp_reset_postdata() setzt den Wert der global $post wp_reset_postdata() auf die post Eigenschaft der Hauptabfrage zurück, die nach der letzten Abfrage der Hauptabfrage sein wird. Sie würden dies tun, wenn Sie setup_postdata() oder $query->the_post() für eine benutzerdefinierte Abfrage verwendet hätten. Beide ersetzen die globale Variable $post , so dass functionen wie the_title() den korrekten Titel für den aktuellen Post in einer Schleife erhalten.

wp_reset_query() setzt die Hauptabfrage zurück auf den ursprünglichen wp_reset_query() . Der einzige Grund dafür, dass ich weiß, ist, wenn Sie query_posts() , um es zu ändern. Das solltest du auf keinen Fall tun. Diese function ruft wp_reset_postdata() auch wp_reset_postdata() , hat also denselben Effekt.

rewind_posts() setzt den aktuellen Post in der Hauptabfrage auf den ersten Post. Da have_posts() rewind_posts() intern rewind_posts() sobald Sie den letzten Post hinter sich haben, bin ich mir nicht sicher, wann Sie diesen jemals verwenden müssen. Wahrscheinlich nur, wenn Sie jemals zum Anfang der Schleife zurückkehren mussten, bevor sie beendet wurde.

Im Grunde sollten Sie wp_reset_postdata() immer dann verwenden, wenn Sie einen der folgenden wp_reset_postdata() :

Eine sekundäre Abfrage:

 $my_query = new WP_Query( $args ); while ( $my_query->have_posts() ) : $my_query->the_post(); the_title(); endwhile; wp_reset_postdata(); 

Looping über get_posts() Ergebnisse:

 global $post; $my_posts = get_posts( $args ); foreach ( $my_posts as $post ) : setup_postdata( $post ); the_title(); endforeach; wp_reset_postdata(); 

Oder Sie erhalten einen einzelnen Beitrag und verwenden Vorlagen-Tags:

 global $post; $post = get_post( $id ); setup_postdata( $post ); the_title(); wp_reset_postdata(); 

Und Sie würden rewind_posts() wenn Sie jemals zum Anfang der Schleife gehen müssen. Dieses Beispiel ist seltsam, aber ich konnte mir keinen besseren vorstellen. Es ist im Grunde, wenn Sie die ersten 3 Posts der Schleife zeigen wollten, dann gehen Sie zum Anfang und zeigen Sie alle:

 global $wp_query; $started_over = false; while ( have_posts() ) : the_post(); the_title(); if ( ! $started_over && $wp_query->current_post == 2 ) { $started_over = true; rewind_posts(); } endwhile; 

Und Sie sollten grundsätzlich nie wp_reset_query();