wp_reset_postdata () atau wp_reset_query () setelah loop kustom?

42

Membaca beberapa hal tentang query_reset_postdatadan query_reset_querymembuat saya bingung. Sebagai contoh:

  1. Apakah perlu menggunakan wp_reset_postdata dan wp_reset_query bersamaan?

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

Di atas menyatakan bahwa Anda hanya boleh menggunakan query_reset_postdata()ketika menggunakan "permintaan terpisah". Di example2 ada komentar:

WP_Query( $args ) = wp_reset_postdata();

DAN

query_posts ( $args ) = wp_reset_query();

Dan sungguh Anda seharusnya tidak pernah menggunakan wp_reset_querykarena Anda seharusnya tidak menggunakan query_posts !?

Dalam WP Codex menyatakan bahwa Anda harus menggunakan wp_reset_query()setelah loop kustom (contoh pertama) http://codex.wordpress.org/Function_Reference/wp_reset_query

Apakah codex itu salah?

bestprogrammerintheworld
sumber

Jawaban:

66

Perbedaan antara keduanya adalah itu

  • wp_reset_query() - memastikan bahwa permintaan utama telah diatur ulang ke permintaan utama asli
  • wp_reset_postdata()- memastikan bahwa global $posttelah dipulihkan ke pos saat ini di permintaan utama.

Memang, melihat sumbernya Anda akan melihat bahwa wp_reset_query()panggilan wp_reset_postdata(). Satu-satunya perbedaan antara keduanya adalah baris ini:

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

(dalam wp_reset_query()). Jadi wp_reset_query()hanya perlu jika kedua global itu berbeda, dan itu hanya terjadi jika query_posts()telah digunakan di suatu tempat.

Kapan saya harus menggunakannya?

Sederhananya:

  • wp_reset_postdata() - Segera setelah setiap kebiasaan WP_Query()
  • wp_reset_query() - Segera setelah setiap loop menggunakan query_posts()

Haruskah saya menggunakan wp_reset_query

Ya, tapi itu hanya perlu setelah digunakan query_posts(). Seperti yang telah Anda tunjukkan, Anda tidak boleh menggunakannyaquery_posts() . Jadi jika Anda tidak pernah menggunakan query_posts()maka tidak perlu menelepon wp_reset_query()(bukan wp_reset_postdata().

Singkatnya, ini bukan yang seharusnya tidak Anda gunakan, wp_reset_query()bukan wp_reset_postdata()yang seharusnya tidak perlu!

Stephen Harris
sumber
1
Jadi pada dasarnya Anda mengatakan: Hanya gunakan wp_reset_postdata () dan codex memiliki contoh yang buruk? (Jika Anda ingin melakukannya dengan benar)
bestprogrammerintheworld
1
Codex mungkin berubah, jadi saya akan menghindari membuat pernyataan absolut tentang hal itu yang mungkin salah. Ini memiliki contoh WP_Query()loop yang menggunakan wp_reset_query()dan tidak perlu begitu. Ini bisa digunakan wp_reset_postdata()sebagai gantinya, tetapi tidak ada salahnya dilakukan. Ini juga memiliki query_posts()contoh di mana ia melakukannya, dan harus digunakan wp_reset_query(). Sebagaimana dicatat dalam naskah kuno, meskipun ini adalah contoh yang buruk dan 'tidak direkomendasikan' dalam arti yang query_posts()tidak boleh digunakan.
Stephen Harris