wp_reset_postdata () hoặc wp_reset_query () sau một vòng lặp tùy chỉnh?


42

Đọc một số thứ về query_reset_postdataquery_reset_querylàm cho tôi bối rối. Ví dụ:

  1. Có cần phải sử dụng cả wp_reset_postdata và wp_reset_query không?

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

Ở trên nói rằng bạn chỉ nên sử dụng query_reset_postdata()khi sử dụng "truy vấn riêng". Trong ví dụ2 có một nhận xét:

WP_Query( $args ) = wp_reset_postdata();

query_posts ( $args ) = wp_reset_query();

Và thực sự bạn không bao giờ nên sử dụng wp_reset_queryvì bạn không nên sử dụng query_posts!?

Trong WP Codex, nó nói rằng bạn nên sử dụng wp_reset_query()sau một vòng lặp tùy chỉnh (ví dụ đầu tiên) http://codex.wordpress.org/Function_Reference/wp_reset_query

Là codex sai rồi sao?

Câu trả lời:


66

Sự khác biệt giữa hai là

  • wp_reset_query() - đảm bảo rằng truy vấn chính đã được đặt lại thành truy vấn chính ban đầu
  • wp_reset_postdata()- đảm bảo rằng toàn cầu $postđã được khôi phục vào bài viết hiện tại trong truy vấn chính.

Thật vậy, nhìn vào nguồn bạn sẽ thấy rằng các wp_reset_query()cuộc gọi wp_reset_postdata(). Sự khác biệt duy nhất giữa hai sau đó là dòng này:

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

(trong wp_reset_query()). Vì vậy, wp_reset_query()chỉ cần thiết hai hai quả cầu đó khác nhau, và điều đó chỉ xảy ra nếu query_posts()đã được sử dụng ở đâu đó.

Khi nào tôi nên sử dụng chúng?

Chỉ cần đặt:

  • wp_reset_postdata() - ngay lập tức sau mỗi tùy chỉnh WP_Query()
  • wp_reset_query() - ngay lập tức sau mỗi vòng lặp sử dụng query_posts()

Tôi có nên sử dụng wp_reset_query

Vâng, vâng, nhưng nó chỉ cần thiết sau khi sử dụng query_posts(). Như bạn đã chỉ ra, bạn không bao giờ nên sử dụngquery_posts() . Vì vậy, nếu bạn chưa từng sử dụng query_posts()thì không cần phải gọi wp_reset_query()(thay vì wp_reset_postdata().

Nói tóm lại, không phải là bạn không nên sử dụng wp_reset_query()thay vì wp_reset_postdata(), đó là điều bạn không cần phải làm!


1
Vì vậy, về cơ bản bạn đang nói: Chỉ sử dụng wp_reset_postdata () và codex có một ví dụ kém? (Nếu bạn muốn làm đúng)
bestprogrammerinthewworld

1
Bộ luật có thể thay đổi, vì vậy tôi sẽ tránh đưa ra những tuyên bố tuyệt đối về nó có thể trở nên không chính xác. Nó có một ví dụ một WP_Query()vòng lặp sử dụng wp_reset_query()và không cần thiết như vậy. Nó có thể sử dụng wp_reset_postdata()thay thế, nhưng không có hại. Nó cũng có một query_posts()ví dụ về nơi nó làm và phải sử dụng wp_reset_query(). Như đã lưu ý trong bộ luật, mặc dù đây là một ví dụ tồi và 'không được khuyến nghị' theo nghĩa query_posts()không bao giờ nên được sử dụng.
Stephen Harris
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.