Главная Новости

Wp_reset_postdata() — Возвращает глобальную переменную $post в правильное состояние: в соответствие с текущим. Функция WordPress.


Опубликовано: 01.09.2018

Возвращает глобальную переменную $post в правильное состояние: в соответствие с текущим.

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

Если после цикла используется функция wp_reset_query() для «сброса данных», то wp_reset_postdata() использовать не обязательно.

Говоря простым языком, wp_reset_postdata() нужна, чтобы после вывода записей не ловить баги: пытаешься получить ID текущей записи (текущей страницы) - $post->ID, а получаешь ID другой записи. Тоже самое с заголовком, датой, контентом и т.д.

✈ 1 раз = 0.000011с = очень быстро | 50000 раз = 0.01с = скорость света PHP 7.0.8, WP 4.6.1

Хуков нет.

Возвращает

Ничего не возвращает.

Использование

<?php wp_reset_postdata(); ?>

Примеры

#1. Пример сброса данных поста и страницы

Этот пример полностью аналогичен работе функции 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();

#2. Когда нужно использовать 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 endwhile; ?> <?php wp_reset_postdata(); // reset the query ?>

#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 endforeach; ?> <?php $post = $tmp_post; // возвращаем данные ?>

Заметки

С версии 3.0. функция использует глобальную переменную $wp_query.

Код wp reset postdata : wp-includes/query.php VER 4.9.6

<?php function wp_reset_postdata() { global $wp_query; if ( isset( $wp_query ) ) { $wp_query->reset_postdata(); } }

Cвязанные функции

Из метки: reset

Еще из раздела: Запросы

rss