wp_reset_postdata () o wp_reset_query () dopo un ciclo personalizzato?


42

Leggere alcune cose query_reset_postdatae query_reset_querymi rende confuso. Per esempio:

  1. È necessario utilizzare insieme sia wp_reset_postdata che wp_reset_query?

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

Sopra afferma che è necessario utilizzare solo query_reset_postdata()quando si utilizzano "query separate". Nell'esempio2 c'è un commento:

WP_Query( $args ) = wp_reset_postdata();

E

query_posts ( $args ) = wp_reset_query();

E davvero non dovresti mai usare wp_reset_queryperché non dovresti usare query_posts !?

Nel WP Codex afferma che è necessario utilizzare wp_reset_query()dopo un ciclo personalizzato (primo esempio) http://codex.wordpress.org/Function_Reference/wp_reset_query

Il codice è sbagliato allora?

Risposte:


66

La differenza tra i due è quella

  • wp_reset_query() - assicurarsi che la query principale sia stata reimpostata sulla query principale originale
  • wp_reset_postdata()- assicura che il globale $postsia stato ripristinato al posto corrente nella query principale.

In effetti, guardando la fonte vedrai che le wp_reset_query()chiamate wp_reset_postdata(). L'unica differenza tra i due è questa riga:

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

(in wp_reset_query()). Quindi wp_reset_query()è necessario solo se quei due globi differiscono e ciò accade solo se query_posts()è stato usato da qualche parte.

Quando dovrei usarli?

In poche parole:

  • wp_reset_postdata() - immediatamente dopo ogni usanza WP_Query()
  • wp_reset_query() - immediatamente dopo ogni ciclo usando query_posts()

Dovrei usare wp_reset_query

Bene, sì, ma è necessario solo dopo l'uso query_posts(). Come hai sottolineato, non dovresti mai usarequery_posts() . Quindi, se non lo usi mai query_posts(), non è necessario chiamare wp_reset_query()(invece di wp_reset_postdata().

In breve, non è che non dovresti usare al wp_reset_query()posto di wp_reset_postdata(), è che non dovresti mai aver bisogno!


1
Quindi in pratica stai dicendo: usa solo wp_reset_postdata () e il codice ha un cattivo esempio? (Se vuoi farlo correttamente)
bestprogrammerintheworld

1
Il codice potrebbe cambiare, quindi eviterò di fare affermazioni assolute al riguardo che potrebbero diventare errate. Ha un esempio di un WP_Query()ciclo che utilizza wp_reset_query()e inutilmente così. Potrebbe usare wp_reset_postdata()invece, ma non viene fatto alcun danno. Ha anche un query_posts()esempio di dove deve e deve usare wp_reset_query(). Come notato nel codice, anche se questo è un cattivo esempio e "non raccomandato", nel senso che query_posts()non dovrebbe mai essere usato.
Stephen Harris,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.