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(); } }