Устанавливает значения глобальных переменных исходя из переданного объекта поста.
Вообще, она нужна для того, чтобы в циклах функции 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().
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.