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_queryWordPress Query object.
Список изменений
| С версии 3.0.0 | Введена. |
Код wp_reset_postdata() wp reset postdata WP 6.9.1
function wp_reset_postdata() {
global $wp_query;
if ( isset( $wp_query ) ) {
$wp_query->reset_postdata();
}
}