wp_reset_postdata()
Возвращает глобальную переменную $post в правильное состояние: в соответствие с текущей страницей.
Функцию нужно использовать каждый раз после запуска произвольного цикла. Т.е. в случаях, когда на странице есть дополнительный цикл WordPress с использованием глобальной переменной $post (см. пример).
Эта функция нужна, чтобы после вывода записей не ловить баги. Примеры возможных багов:
- Пытаешься получить ID текущей записи (текущей страницы) через
$post->ID
, а получаешь ID другой записи. - Пытаешься получить заголовок, дату, контент текущей страницы, а получаешь от другой.
Если после цикла используется функция wp_reset_query() для «сброса данных», то эту функцию использовать не обязательно.
Хуков нет.
Возвращает
null
. Ничего не возвращает.
Использование
wp_reset_postdata();
Примеры
#1 Когда нужно использовать wp_reset_postdata()?
Еще одни пример, показывающий в каких случаях нужно использовать wp_reset_postdata():
<?php $custom_query = new WP_Query( 'cat=-9' ); while( $custom_query->have_posts() ){ $custom_query->the_post(); ?> <div <?php post_class(); ?> id="post-<?php the_ID(); ?>"> <h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1> <?php the_content(); ?> </div> <?php } wp_reset_postdata(); // reset the query ?>
#2 Пример сброса данных поста и страницы
Этот пример полностью аналогичен работе функции wp_reset_query().
$original_query = $wp_query; $wp_query = new WP_Query( $args ); if( have_posts() ){ while( have_posts() ){ the_post(); the_title(); the_excerpt(); } } else{ echo 'Записей не найдено'; } $wp_query = $original_query; wp_reset_postdata();
#3 Альтернатива
В качестве альтернативы wp_reset_postdata() (в версиях ВП ниже 3.0), можно сначала записать $post во временную переменную $tmp_post, а после цикла вернуть прежнее значение переменной $post: $post = $tmp_post:
<?php global $post; $tmp_post = $post; // сохраняем данные // делаем запрос $myposts = get_posts( 'numberposts=5&offset=1&category=1' ); foreach( $myposts as $post ){ setup_postdata( $post ); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php } $post = $tmp_post; // возвращаем данные ?>
Заметки
- Global. WP_Query. $wp_query WordPress Query object.
Список изменений
С версии 3.0.0 | Введена. |
Код wp_reset_postdata() wp reset postdata WP 6.7.1
function wp_reset_postdata() { global $wp_query; if ( isset( $wp_query ) ) { $wp_query->reset_postdata(); } }