setup_postdata

评论(2)

setup_postdata 函数是 WordPress 中一个比较神奇的函数,能将对象变量声明到全局的$post变量中,这样我们就可以像在主循环中为所欲为的使用模板标签了。

说这么多都只是空谈,setup_postdata这个函数平时我们很少用到,以至于目前为止我还没找到一个中文的介绍文章。
只是在其他文章中能找到只字片语,但因为确实很实用,所以就单独行文,备忘之。

setup_postdata 函数描述

英文版的我就不放了,
我的解释是:
将我们自定义查询的文章对象声明到全局$post变量中,以便我们使用模板标签。
这里的查询变量我们需要从get_post()或是get_posts查询获得,当然只要是标准的文章对象,你都可以用setup_postdata来声明到全局去,不仅限于这两个函数。

使用

<?php 
//获取全局变量,
global $post;
setup_postdata( $post ); 
?>

官方的例子就是这么坑爹。

来一个复杂点的:

<ul>
<?php
 
//定义查询条件
$args = array( 'numberposts' => 5, 'offset'=> 1, 'category' => 1 );
 
//获得查询文章(多篇)
$myposts = get_posts( $args );
 
//遍历文章数组
foreach( $myposts as $post ) :	setup_postdata($post); ?>
	setup_postdata( $post ); 
	<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
 
<?php 
endforeach;
 
//重置 算是setup_postdata( )的反函数
wp_reset_postdata(); 
 
?>
</ul>

这样是不是就清晰多了?

再来一个例子吧,以下的例子源自 我目前用的主题的边栏的随机/最新 文章显示模块

function dw_side_post($i=3){
	global $post;
	$mylist = ''; 
	$mytitle = is_single() ? '最新文章':'随机推荐';
	$posts = is_single() ? get_posts("numberposts={$i}&orderby=post_date"):get_posts("numberposts={$i}&orderby=rand");
	foreach($posts as $post) {
		setup_postdata($post);
		$mylist .=  '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
	}
	 $output = '<div class="widget"><div class="title">'.$mytitle.'</div><ul>'.$mylist.'</ul></div>';
echo $output;
}

注意

使用本函数的时候,请注意不要在主循环中使用,不然会达不到你预期的效果,
怎样退出循环,这个你可以在调用该函数不成功的时候去搜搜。

PS:
最近发现网上很多朋友转载我的文章,在这里呐喊一下,
转发文章的时候能不能给留个出处?这样也好鼓励我写文章,
我再多些文章你也好有文章抄,对吧?

另外,停更不少日子了,是因为最近公司里挺忙的,所以有可能会停更更长时间。





转载请注明转自: setup_postdata

  1. 解释的非常好,难得的中文资料,谢谢!

  2. 非常不错 有很多实质性的好东西 加油