我正在使用get_posts()
从特定类别获取帖子以显示在我的主页顶部,与主页主循环分离。除了标题(通过the_title()
) 总是一样的;获取的第一篇文章的标题get_posts()
. the_permalink()
也一样,但是the_excerpt()
返回每个帖子的正确结果。
以下是我的代码(我只删除了几行代码,以免无意中删除导致此问题的原因):
$query = get_posts(array(
\'numberposts\'=>-1,
\'category\'=>3
));
$events = array();
if ($query) {
foreach ($query as $tpost) {
$fields = get_post_custom($tpost->ID);
if (isset($fields[\'event_start\'])) {
$usetime = $fields[\'event_start\'][0];
if (isset($fields[\'event_end\'])) {
$usetime = $fields[\'event_end\'][0];
}
if ($usetime>time()) {
$events[] = array("post"=>$tpost,"fields"=>$fields);
}
}
}
usort($events,function($a,$b){
$a = $a[\'fields\'][\'event_start\'][0];
$b = $b[\'fields\'][\'event_start\'][0];
if ($a==$b) { return 0; }
return ($a < $b) ? -1 : 1;
});
}
if (count($events)>0) { ?>
<div class="pad10 tac">
<h2 class="mar10">Upcoming Events</h2>
<div class="tiles">
<?php foreach ($events as $event ) { ?>
<?php setup_postdata( $event[\'post\'] );?>
<a href="<?php the_permalink(); ?>" class=\'noshow\'>
<div class="tile smalltile"><div id=\'post-<?php the_ID(); ?>\'>
<h2><?php the_title();?></h2>
<b><?php
echo(date_i18n("D, F j @ g:ia",$event[\'fields\'][\'event_start\'][0]));
?></b>
<p><?php the_excerpt();?></p>
</div></div>
</a>
<?php }?>
</div></div>
<?php }?>
我真的很抓狂,尤其是因为这段代码在很大程度上是基于
get_posts()
示例来自
this article, 据报道,它在哪里工作良好。
我认为这可能与我使用setup\\u postdata有关,但我认为这只是胡乱猜测。
SO网友:Santo Boldizar
使用setup_postdata()
为此。
Important setup_postdata()
不分配全局$post
所以你自己做这件事很重要。
Important 使用wp_reset_postdata()
在foreach循环之后。
有关更多信息,请访问:https://developer.wordpress.org/reference/functions/setup_postdata/
<?php
// Get posts
global $post;
$posts = get_posts([
\'post_type\' => \'post\',
\'numberposts\' => 6
]);
?>
<?php foreach ($posts as $key => $post): ?>
<?php setup_postdata($post); ?>
<h3>
<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">
<?php the_title(); ?>
</a>
</h3>
<?php endforeach; ?>
<?php wp_reset_postdata(); ?>