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.