Сброс произвольного цикла – в чем разница между wp_reset_postdata и wp_reset_query в WordPress?

Dmitriy_2014
На сайте с 01.07.2014
Offline
344
823

Всем привет!

При выводе статей в разных местах и использовании цикла через new WP_Query и других, рекомендуют сбрасывать их значения добавляя в конец wp_reset_postdata и wp_reset_query – какая между ними разница.

Всем спасибо за ответы!

SeVlad
На сайте с 03.11.2008
Offline
1609
#1

Dmitriy_2014, сколько можно уже посты набивать такими тупыми вопросами? Не знаешь где документация и в крайнем случае гуглояндексы?

Вольный перевод на русский с объяснениями:

https://wp-kama.ru/function/wp_reset_query

https://wp-kama.ru/function/wp_reset_postdata

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
Dmitriy_2014
На сайте с 01.07.2014
Offline
344
#2

SeVlad,

Да это понятно, это я читал, там даже в одном из примеров написано что wp_reste_postdata(); полностью аналогичен работе функции wp_reset_query(); - я уловить разницу что-то не могу, толи нету ни какой разницы, то ли…

danforth
На сайте с 18.12.2015
Offline
153
#3

Загляните в код. wp_reset_query() вызывает wp_reset_postdata()

/**
102 * Destroys the previous query and sets up a new query.
103 *
104 * This should be used after query_posts() and before another query_posts().
105 * This will remove obscure bugs that occur when the previous WP_Query object
106 * is not destroyed properly before another is set up.
107 *
108 * @since 2.3.0
109 *
110 * @global WP_Query $wp_query Global WP_Query instance.
111 * @global WP_Query $wp_the_query Copy of the global WP_Query instance created during wp_reset_query().
112 */
113 function wp_reset_query() {
114 $GLOBALS['wp_query'] = $GLOBALS['wp_the_query'];
115 wp_reset_postdata();
116 }
117
118 /**
119 * After looping through a separate query, this function restores
120 * the $post global to the current post in the main query.
121 *
122 * @since 3.0.0
123 *
124 * @global WP_Query $wp_query Global WP_Query instance.
125 */
126 function wp_reset_postdata() {
127 global $wp_query;
128
129 if ( isset( $wp_query ) ) {
130 $wp_query->reset_postdata();
131 }
132 }
Junior Web Developer
Dmitriy_2014
На сайте с 01.07.2014
Offline
344
#4

Я тут не селен конечно, но то есть wp_reset_query() сбрасывает глобальную переменную $GLOBALS и заодно $wp_query, а wp_reset_postdata() только global $wp_query. Для таких тупых как я, это примерно вот где то видел в коментариях:


WP_Query( $args ) = wp_reset_postdata();

AND

query_posts ( $args ) = wp_reset_query();

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий