Устанавливает значения глобальных переменных исходя из переданного объекта поста.
Вообще, она нужна для того, чтобы в циклах функции get_posts() или же прямого вывода постов из БД работали такие функции, как the_title(), the_permalink() и так далее.
setup_postdata( $post );
$post
, иначе функция просто не будет работать.Теперь давайте посмотрим, что за такие глобальные переменные устанавливает функция:
$post->ID
.$authordata = get_userdata($post->post_author);
d.m.y
.m
.count( $pages )
.<!--nextpage-->
), иначе равен нулю.setup_postdata()
установит её значение, равному единице в следующих случаях:
$page
больше единицы.Также должен отметить, что функция возвращает false
в двух случаях:
$wp_query
не задана.$wp_query
не является объектом класса WP_Query.Давайте вытащим несколько постов из базы при помощи функции get_posts(), если в теле цикла попробовать вывести заголовок через get_the_title() или ссылку через get_permalink() — у нас ничего не выйдет, эта проблема решается следующим образом:
$args = array( 'posts_per_page' => 5, 'orderby' => 'name' ); $posts = get_posts( $args ); foreach( $posts as $post ) { setup_postdata($post); // так решается проблема функций get_permalink() и get_the_title() echo '<a href="' . get_permalink() . '">' . get_the_title() . '</a>'; } wp_reset_postdata();
global $wpdb, $post; $db_query = "SELECT $wpdb->posts.* FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish'"; // все опубликованные записи $db_results = $wpdb->get_results($db_query); foreach($db_results as $post) { setup_postdata($post); echo '<a href="' . get_permalink() . '">' . get_the_title() . '</a>'; } wp_reset_postdata();
Для того, чтобы последующие циклы на странице работали корректно, то после завершения текущих дополнительных циклов не помешает добавить функцию wp_reset_postdata().
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.