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()під час використання "окремих запитів". У example2 є коментар:

WP_Query( $args ) = wp_reset_postdata();

І

query_posts ( $args ) = wp_reset_query();

І справді ви ніколи не повинні використовувати, wp_reset_queryтому що ви не повинні використовувати query_posts !?

У кодексі WP зазначено, що слід використовувати wp_reset_query()після користувацького циклу (перший приклад) http://codex.wordpress.org/Function_Reference/wp_reset_query

Тоді кодекс помиляється?

Відповіді:


65

Різниця між ними полягає в тому

  • 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 (), а кодекс має поганий приклад? (Якщо ви хочете зробити це правильно)
bestprogrammerintworld world

1
Кодекс може змінитися, тому я не хочу робити абсолютних тверджень про нього, які можуть стати неправильними. У ній є приклад WP_Query()циклу, який використовує wp_reset_query()і без потреби. Він може wp_reset_postdata()замість цього використовувати , але шкоди не завдано. Він також має query_posts()приклад, коли це робить і повинен використовувати wp_reset_query(). Як зазначається в кодексі, хоча це поганий приклад і "не рекомендується" в тому сенсі, який query_posts()ніколи не слід використовувати.
Стівен Харріс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.