参数
- $post
-
(WP_Post|object|int)(必填) WP_Post实例或文章ID/对象。
返回
(bool) 完成时为true。
更多信息
设置全局post数据。帮助格式化自定义查询结果以使用模板标签。
setup_postdata()填充全局变量$id
、$authordata
、$currentday
、$currentmonth
、$page
、$pages
、$multipage
、$more
、$numpages
,这有助于许多模板标签在当前post上下文中工作。
setup_postdata()
没有分配全局$post
变量,因此您自己这样做很重要。如果不这样做,将导致将上述任何全局变量与$post
全局变量结合使用的任何钩子出现问题,因为它们将引用单独的实体。
用法
<?php global $post; // modify the $post variable with the post data you want. Note that this variable must have this name! setup_postdata( $post ); ?>
源码
更新日志
版本 | 描述 |
---|---|
4.4.0 | 添加了将文章ID传递给$post 的功能。 |
1.5.0 | 开始引入 |
使用示例
关于
setup_postdata
和$post
全局变量的一个重要注意事项是:setup_postdata( $new_post )
设置了与当前文章相关的各种全局变量,但它不会更新$post
的全局变量。这种不相交可能导致WP内部和插件、主题中出现问题。因此,如果调用
setup_postdata( $new_post )
,还应将其分配给全局$post
对象。在自定义查询中使用
setup_postdata
的示例:global $wpdb, $post; $query = "SELECT * FROM `wp_posts` WHERE `post_type` = 'cpt_1' AND `post_status` = 'publish' AND `comment_count` > 0 LIMIT 5"; $result = $wpdb->get_results($query, OBJECT); if ( $result && count($result) > 0 ): echo '<ol>'; foreach ($result as $post): setup_postdata($post); echo '<li>'; the_title(); echo '</li>'; endforeach; echo '</ol>'; wp_reset_postdata(); endif;
实施例1
<ul> <?php global $post; $myposts = get_posts( array( 'posts_per_page' => 5, 'offset' => 1, 'category' => 1 ) ); if ( $myposts ) : foreach ( $myposts as $mypost ) : setup_postdata( $mypost ); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> endforeach; wp_reset_postdata(); endif; ?> </ul>
<ul> <?php global $post; $myposts = get_posts( array( 'posts_per_page' => 5, 'offset' => 1, 'category' => 1 ) ); if ( $myposts ) : foreach ( $myposts as $post ) : setup_postdata( $post ); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> endforeach; wp_reset_postdata(); endif; ?> </ul>