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 говорится, что вы должны использовать wp_reset_query()после пользовательского цикла (первый пример) http://codex.wordpress.org/Function_Reference/wp_reset_query

Кодекс неправильный тогда?

bestprogrammerintheworld
источник

Ответы:

66

Разница между ними заключается в том, что

  • 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 (), и у кодекса плохой пример? (Если вы хотите сделать это правильно)
bestprogrammerintheworld
1
Кодекс может измениться, поэтому я собираюсь избегать абсолютных утверждений о нем, которые могут стать неверными. У него есть пример WP_Query()цикла, который использует wp_reset_query()и излишне так. Это может использовать wp_reset_postdata()вместо этого, но никакого вреда не сделано. У этого также есть query_posts()пример, где это делает, и должно , использовать wp_reset_query(). Как отмечено в кодексе, хотя это плохой пример и «не рекомендуется» в том смысле, что query_posts()его никогда не следует использовать.
Стивен Харрис