参数
- $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>