wp_reset_postdata () หรือ wp_reset_query () หลังจากวนซ้ำที่กำหนดเอง


42

การอ่านบางสิ่งเกี่ยวกับquery_reset_postdataและquery_reset_queryทำให้ฉันสับสน ตัวอย่างเช่น:

  1. จำเป็นต้องใช้ทั้ง wp_reset_postdata และ wp_reset_query ด้วยกันไหม?

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

ข้างต้นระบุว่าคุณควรใช้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

codex นั้นผิดหรือเปล่า?

คำตอบ:


64

ความแตกต่างระหว่างสองคือ

  • wp_reset_query() - ตรวจสอบให้แน่ใจว่ามีการตั้งค่าคิวรีหลักเป็นคิวรีหลักดั้งเดิม
  • wp_reset_postdata()- ตรวจสอบให้แน่ใจว่าโลก$postได้รับการกู้คืนไปยังโพสต์ปัจจุบันในแบบสอบถามหลัก

อันที่จริงมองไปที่แหล่งที่มาคุณจะเห็นว่าสาย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()มันเป็นสิ่งที่คุณไม่จำเป็นต้องทำ!


1
โดยพื้นฐานแล้วคุณกำลังพูดว่า: ใช้ wp_reset_postdata () เท่านั้นและ codex มีตัวอย่างที่ไม่ดี? (หากคุณต้องการแก้ไขให้ถูกต้อง)
bestprogrammerintheworld

1
codex อาจมีการเปลี่ยนแปลงดังนั้นฉันจะหลีกเลี่ยงการสร้างงบที่แน่นอนซึ่งอาจไม่ถูกต้อง มันมีตัวอย่างWP_Query()ลูปที่ใช้wp_reset_query()และไม่จำเป็นดังนั้น มันสามารถใช้wp_reset_postdata()แทน แต่ไม่ทำอันตราย นอกจากนี้ยังมีquery_posts()ตัวอย่างที่มันไม่และต้องwp_reset_query()ใช้ ดังที่ระบุไว้ใน codex แม้ว่านี่จะเป็นตัวอย่างที่ไม่ดีและ 'ไม่แนะนำ' ในแง่ที่query_posts()ไม่ควรใช้
Stephen Harris
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.