wp_reset_postdata () oder wp_reset_query () nach einer benutzerdefinierten Schleife?

42

Ein paar Sachen über das Lesen query_reset_postdataund query_reset_querymacht mich verwirrt. Zum Beispiel:

  1. Müssen sowohl wp_reset_postdata als auch wp_reset_query zusammen verwendet werden?

  2. http://www.poststat.us/properly-reset-wordpress-query/

Oben steht, dass Sie nur verwenden sollten, query_reset_postdata()wenn Sie "separate Abfragen" verwenden. In Beispiel 2 gibt es einen Kommentar:

WP_Query( $args ) = wp_reset_postdata();

UND

query_posts ( $args ) = wp_reset_query();

Und wirklich sollten Sie nie verwenden, wp_reset_queryweil Sie query_posts nicht verwenden sollten !?

Im WP-Codex heißt es, dass Sie wp_reset_query()nach einer benutzerdefinierten Schleife (erstes Beispiel) http://codex.wordpress.org/Function_Reference/wp_reset_query verwenden sollten

Ist der Codex dann falsch?

bestprogrammerintheworld
quelle

Antworten:

64

Der Unterschied zwischen den beiden ist der

  • wp_reset_query() - Stellen Sie sicher, dass die Hauptabfrage auf die ursprüngliche Hauptabfrage zurückgesetzt wurde
  • wp_reset_postdata()- Stellt sicher, dass die globale $postin den aktuellen Beitrag in der Hauptabfrage wiederhergestellt wurde.

In der Tat, wenn Sie sich die Quelle ansehen, werden Sie sehen, dass die wp_reset_query()Anrufe wp_reset_postdata(). Der einzige Unterschied zwischen den beiden ist dann diese Zeile:

$GLOBALS['wp_query'] = $GLOBALS['wp_the_query'];

(in wp_reset_query()). Es wp_reset_query()ist also nur notwendig, wenn sich diese beiden Globalen unterscheiden, und das passiert nur, wenn query_posts()sie irgendwo verwendet wurden.

Wann sollte ich sie benutzen?

Einfach gesagt:

  • wp_reset_postdata() - Sofort nach jedem Brauch WP_Query()
  • wp_reset_query() - Unmittelbar nach jeder Verwendung der Schleife query_posts()

Soll ich wp_reset_query verwenden

Nun ja, aber es wird erst nach der Verwendung benötigt query_posts(). Wie Sie bereits betont haben, solltenquery_posts() Sie niemals verwenden . Wenn Sie also nie etwas verwenden, müssen query_posts()Sie nicht anrufen wp_reset_query()(statt wp_reset_postdata().

Kurz gesagt, es ist nicht , dass Sie nicht verwenden sollten , wp_reset_query()statt wp_reset_postdata(), dann ist es , dass Sie nicht immer brauchen sollten!

Stephen Harris
quelle
1
Sie sagen also im Grunde: Verwenden Sie nur wp_reset_postdata () und der Codex hat ein schlechtes Beispiel? (Wenn Sie es richtig machen wollen)
bestprogrammerintheworld
1
Der Kodex kann sich ändern, deshalb werde ich es vermeiden, absolute Aussagen darüber zu machen, die möglicherweise falsch werden. Es gibt ein Beispiel für eine WP_Query()Schleife, die dies wp_reset_query()unnötigerweise verwendet. Es könnte wp_reset_postdata()stattdessen verwendet werden, aber es wird kein Schaden angerichtet. Es hat auch ein query_posts()Beispiel , wo es der Fall ist, und muss , verwenden wp_reset_query(). Wie im Kodex vermerkt, ist dies jedoch ein schlechtes Beispiel und "nicht zu empfehlen" in dem Sinne, dass query_posts()es niemals verwendet werden sollte.
Stephen Harris