当前浏览:首页 / WordPress函数 / setup_postdata()

setup_postdata( WP_Post|object|int $post )

设置全局文章数据

postdata

setup


参数

$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开始引入

使用示例

  • 示例1

    关于setup_postdata$post全局变量的一个重要注意事项是:setup_postdata( $new_post )设置了与当前文章相关的各种全局变量,但它不会更新$post的全局变量。这种不相交可能导致WP内部和插件、主题中出现问题。

    因此,如果调用setup_postdata( $new_post ),还应将其分配给全局$post对象。

  • 示例2

    在自定义查询中使用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;
  • 示例3

    实施例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>
    
  • 示例4
    <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>