wp_reset_postdata() WP 3.0.0

Повертає глобальну змінну $post у правильний стан: у відповідність до поточної сторінки.

Функцію потрібно використовувати щоразу після запуску довільного циклу . Тобто. у випадках, коли на сторінці є додатковий цикл WordPress із використанням глобальної змінної $post (див. приклад).

Ця функція потрібна, щоб після виведення записів не ловити баги. Приклади можливих багів:

  • Намагаєшся отримати ID поточного запису (поточної сторінки) через $post->ID, а отримуєш ID іншого запису.
  • Намагаєшся отримати заголовок, дату, контент поточної сторінки, а отримуєш від іншої.

Якщо після циклу використовується функція wp_reset_query() для скидання даних, то цю функцію використовувати не обов’язково.

Працює на основі:
WP_Query::reset_postdata()
1 раз – 0.000011 сек
(дуже швидко) | 50000 разів – 0.01 сек
(швидкість світла) |
PHP 7.0.8, WP 4.6.1

Хуків немає.

Повертає

null. Нічого не вертає.

Використання

wp_reset_postdata();

Приклади

1

#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
?>
0

#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();
0

#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 6.0.2

function wp_reset_postdata() {
	global $wp_query;

	if ( isset ( $ wp_query ) ) {
		$wp_query->reset_postdata();
	}
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *