問題描述

閲讀一些關於 query_reset_postdataquery_reset_query 的東西讓我困惑。例如:

  1. Is there any need to use both wp_reset_postdata and wp_reset_query together?

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

以上説明使用”separate queries” 時應該只使用 query_reset_postdata()。在例 2 中有一個評論:

WP_Query( $args ) = wp_reset_postdata();

query_posts ( $args ) = wp_reset_query();

真的不要使用 wp_reset_query,因為你不應該使用 query_posts!

在 WP Codex 中,它聲明您應該在自定義循環後使用 wp_reset_query()(第一個例子)http://codex.wordpress.org/Function_Reference/wp_reset_query

那鱈魚是錯的嗎?

最佳解決方案

兩者之間的區別在於

  •  wp_reset_query() – 確保主查詢已重置為原始主查詢
  •  wp_reset_postdata() – 確保全局 $post 已經恢復到主查詢中的當前帖子。

實際上,看看 source,你會看到 wp_reset_query()調用 wp_reset_postdata()。兩者之間唯一的區別就是這一行:

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

(wp_reset_query()) 。所以 wp_reset_query()只有當這兩個全局變量不同時才需要,只有在 query_posts()被用於某個地方才會發生。

我什麼時候應該使用它們?

簡單的説:

  •  wp_reset_postdata() – 每次定製後立即 WP_Query()
  •  wp_reset_query() – 每循環後立即使用 query_posts()

我應該使用 wp_reset_query

嗯,是的,但只有使用 query_posts()才需要。正如你所指出的,你不應該使用 query_posts()。所以如果您沒有使用 query_posts(),那麼就不用調用 wp_reset_query()(而不是 wp_reset_postdata()) 。

簡而言之,這不是你不應該使用 wp_reset_query()而不是 wp_reset_postdata(),這是你不應該需要!

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。