wp_reset_postdata()
Повертає глобальну змінну $post у правильний стан: у відповідність до поточної сторінки.
Функцію потрібно використовувати щоразу після запуску довільного циклу . Тобто. у випадках, коли на сторінці є додатковий цикл WordPress із використанням глобальної змінної $post (див. приклад).
Ця функція потрібна, щоб після виведення записів не ловити баги. Приклади можливих багів:
- Намагаєшся отримати ID поточного запису (поточної сторінки) через
$post->ID, а отримуєш ID іншого запису. - Намагаєшся отримати заголовок, дату, контент поточної сторінки, а отримуєш від іншої.
Якщо після циклу використовується функція wp_reset_query() для скидання даних, то цю функцію використовувати не обов’язково.
WP_Query::reset_postdata()
(дуже швидко) | 50000 разів – 0.01 сек
(швидкість світла) |
PHP 7.0.8, WP 4.6.1
Хуків немає.
Повертає
null. Нічого не вертає.
Використання
wp_reset_postdata();
Приклади
#1 Коли потрібно використовувати wp_reset_postdata()?
Ще один приклад, який показує у яких випадках потрібно використовувати wp_reset_postdata() :
<?php
$custom_query = новий 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.0.2
function wp_reset_postdata() {
global $wp_query;
if ( isset ( $ wp_query ) ) {
$wp_query->reset_postdata();
}
}