wp_reset_postdata () czy wp_reset_query () po niestandardowej pętli?

42

Czytanie niektórych rzeczy query_reset_postdatai query_reset_querywprawia mnie w zakłopotanie. Na przykład:

  1. Czy istnieje potrzeba jednoczesnego używania zarówno wp_reset_postdata, jak i wp_reset_query?

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

Powyżej stwierdza, że ​​powinieneś używać tylko query_reset_postdata()podczas korzystania z „oddzielnych zapytań”. W przykładzie 2 jest komentarz:

WP_Query( $args ) = wp_reset_postdata();

I

query_posts ( $args ) = wp_reset_query();

I naprawdę nigdy nie powinieneś używać, wp_reset_queryponieważ nie powinieneś używać query_posts !?

W WP Codex stwierdza, że ​​powinieneś używać wp_reset_query()po niestandardowej pętli (pierwszy przykład) http://codex.wordpress.org/Function_Reference/wp_reset_query

Czy zatem kodeks jest zły?

bestprogrammerintheworld
źródło

Odpowiedzi:

65

Różnica między nimi jest taka

  • wp_reset_query() - upewnij się, że główne zapytanie zostało zresetowane do pierwotnego głównego zapytania
  • wp_reset_postdata()- zapewnia, że ​​globalny $postzostał przywrócony do bieżącego postu w głównym zapytaniu.

Rzeczywiście, patrząc na źródło zobaczysz, że wp_reset_query()połączenia wp_reset_postdata(). Jedyna różnica między nimi to następująca linia:

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

(w wp_reset_query()). Więc wp_reset_query()jest to konieczne tylko te dwa globalne powinny się różnić, a to zdarza się tylko, jeśli query_posts()został użyty gdzieś.

Kiedy powinienem ich używać?

Po prostu:

  • wp_reset_postdata() - natychmiast po każdym zwyczaju WP_Query()
  • wp_reset_query() - natychmiast po każdym użyciu pętli query_posts()

Czy powinienem użyć wp_reset_query

No tak, ale jest potrzebny tylko po użyciu query_posts(). Jak zauważyłeś, nigdy nie powinieneś używaćquery_posts() . Więc jeśli nigdy nie korzystasz query_posts(), nie musisz dzwonić wp_reset_query()(zamiast wp_reset_postdata().

Krótko mówiąc, to nie jest tak, że nie powinieneś używać wp_reset_query()zamiast wp_reset_postdata(), to, że nigdy nie powinieneś tego robić!

Stephen Harris
źródło
1
Więc w zasadzie mówisz: używaj tylko wp_reset_postdata (), a kodeks ma kiepski przykład? (Jeśli chcesz to zrobić poprawnie)
bestprogrammerintheworld
1
Kodeks może się zmienić, więc unikam wydawania absolutnych oświadczeń na jego temat, które mogą stać się niepoprawne. Ma przykładową WP_Query()pętlę, która wykorzystuje wp_reset_query()i niepotrzebnie. Może wp_reset_postdata()zamiast tego użyć , ale nie wyrządza żadnej szkody. Ma również query_posts()przykład, w którym używa i musi korzystać wp_reset_query(). Jak zauważono w kodeksie, jest to jednak zły przykład i „nie jest zalecany” w takim sensie, że query_posts()nigdy nie należy go używać.
Stephen Harris