wp_reset_postdata () ou wp_reset_query () após um loop personalizado?

42

Ler algumas coisas query_reset_postdatae query_reset_queryme deixa confusa. Por exemplo:

  1. É necessário usar o wp_reset_postdata e o wp_reset_query juntos?

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

Acima afirma que você só deve usar query_reset_postdata()ao usar "consultas separadas". No exemplo 2, há um comentário:

WP_Query( $args ) = wp_reset_postdata();

E

query_posts ( $args ) = wp_reset_query();

E realmente você nunca deve usar wp_reset_queryporque não deve usar query_posts !?

No WP Codex, afirma que você deve usar wp_reset_query()após um loop personalizado (primeiro exemplo) http://codex.wordpress.org/Function_Reference/wp_reset_query

O codex está errado então?

bestprogrammerintheworld
fonte

Respostas:

66

A diferença entre os dois é que

  • wp_reset_query() - verifique se a consulta principal foi redefinida para a consulta principal original
  • wp_reset_postdata()- garante que o global $posttenha sido restaurado para a postagem atual na consulta principal.

Na verdade, olhando para a fonte, você verá que as wp_reset_query()chamadas wp_reset_postdata(). A única diferença entre os dois então é esta linha:

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

(dentro wp_reset_query()). Então, isso wp_reset_query()é necessário apenas se essas duas globais diferirem, e isso só acontece se query_posts()tiver sido usado em algum lugar.

Quando devo usá-los?

Simplificando:

  • wp_reset_postdata() - imediatamente após cada costume WP_Query()
  • wp_reset_query() - imediatamente após cada loop usando query_posts()

Devo usar wp_reset_query

Bem, sim, mas só é necessário após o uso query_posts(). Como você apontou , nunca deve usarquery_posts() . Portanto, se você nunca estiver usando query_posts(), não será necessário ligar wp_reset_query()(em vez de wp_reset_postdata().

Em suma, não é que você não deva usar em wp_reset_query()vez de wp_reset_postdata(), é que você nunca deveria precisar!

Stephen Harris
fonte
1
Então, basicamente, você está dizendo: Use apenas wp_reset_postdata () e o codex tem um exemplo ruim? (Se você quiser fazê-lo corrigir)
bestprogrammerintheworld
1
O códice pode mudar, por isso vou evitar fazer afirmações absolutas sobre ele, que podem se tornar incorretas. Ele tem um exemplo de WP_Query()loop que usa wp_reset_query()e desnecessariamente. Em wp_reset_postdata()vez disso, poderia ser usado , mas nenhum dano é causado. Ele também tem um query_posts()exemplo de onde ele deve e deve usar wp_reset_query(). Conforme observado no códice, esse é um péssimo exemplo e 'não é recomendado', no sentido de que query_posts()nunca deve ser usado.
Stephen Harris