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

14 mag 2014, 09:35:18
Visualizzazioni: 92.1K
Voti: 66

Leggendo alcune informazioni su query_reset_postdata e query_reset_query mi sento confuso. Ad esempio:

  1. È necessario utilizzare sia wp_reset_postdata che wp_reset_query insieme?

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

Sopra si afferma che dovresti usare solo query_reset_postdata() quando utilizzi "query separate". Nell'esempio2 c'è un commento:

WP_Query( $args ) = wp_reset_postdata();

E

query_posts ( $args ) = wp_reset_query();

E in realtà non dovresti mai usare wp_reset_query perché non dovresti usare query_posts!?

Nel Codex di WordPress si afferma che dovresti usare wp_reset_query() dopo un loop personalizzato (primo esempio) http://codex.wordpress.org/Function_Reference/wp_reset_query

Allora il codex è sbagliato?

0
Tutte le risposte alla domanda 1
4
106

La differenza tra i due è che

  • wp_reset_query() - assicura che la query principale sia stata ripristinata alla query principale originale
  • wp_reset_postdata() - assicura che il globale $post sia stato ripristinato al post corrente nella query principale.

Infatti, guardando il sorgente vedrai che wp_reset_query() chiama 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 global sono diversi, e ciò accade solo se è stato utilizzato query_posts() da qualche parte.

Quando dovrei usarli?

In parole semplici:

  • wp_reset_postdata() - subito dopo ogni WP_Query() personalizzato
  • wp_reset_query() - subito dopo ogni loop che utilizza query_posts()

Dovrei usare wp_reset_query

Beh, sì, ma è necessario solo dopo aver usato query_posts(). Come hai sottolineato tu, non dovresti mai usare query_posts(). Quindi se non usi mai query_posts(), allora non è necessario chiamare wp_reset_query() (invece di wp_reset_postdata().

In breve, non è che non dovresti usare wp_reset_query() invece di wp_reset_postdata(), è che non dovresti mai averne bisogno!

14 mag 2014 09:49:16
Commenti

Quindi in pratica stai dicendo: Usare solo wp_reset_postdata() e il codex ha un esempio poco chiaro? (Se vuoi farlo correttamente)

bestprogrammerintheworld bestprogrammerintheworld
14 mag 2014 10:40:07

Il codex potrebbe cambiare, quindi eviterò di fare affermazioni assolute che potrebbero diventare non corrette. Contiene un esempio di loop WP_Query() che utilizza wp_reset_query() in modo non necessario. Potrebbe usare wp_reset_postdata() invece, ma non fa male. Ha anche un esempio con query_posts() dove usa, e deve usare, wp_reset_query(). Come notato nel codex, tuttavia questo è un cattivo esempio e 'non raccomandato' nel senso che query_posts() non dovrebbe mai essere usato.

Stephen Harris Stephen Harris
14 mag 2014 11:08:23

Devo resettare la query se ciclo attraverso la query all'interno di un foreach loop?

Ad esempio:

$sol_args = array( 'post_type' => 'solution', 'orderby' => 'menu_order', 'order' => 'ASC', 'lang' => pll_current_language(), 'posts_per_page' => '-1', );

$solution_posts = new WP_Query($sol_args); $solution_posts = $solution_posts->get_posts();

<?php foreach ($solution_posts as $solution_post) { ?> <?php } ?>

wp_reset_postdata()

Marcuzio Developuzio Marcuzio Developuzio
9 nov 2022 15:01:44

Ho preso questo consiglio alla lettera e ho avuto problemi. Dice di chiamare wp_reset_postdata() immediatamente dopo ogni WP_Query() personalizzata (enfasi aggiunta). Ma, la documentazione per sviluppatori afferma che dovrebbe essere chiamato quando:

"Un loop di query secondario che utilizza $sec_query = new WP_Query() e $sec_query->the_post() influenza la variabile globale $post."

Ancora una volta, enfasi aggiunta.

Se non stai chiamando the_post() allora non c'è bisogno di chiamare wp_reset_postdata() e, infatti, farlo può causare problemi.

Dave S Dave S
1 mag 2024 19:57:16