问题描述

我不知道为什么,但我已经使用 get_posts()查询一些数据。然后我使用 setup_postdata() … 我认为它的使用,所以我可以使用像 the_permalink()等功能与新的帖子数据?

<?php foreach ($childPosts as $cp) : setup_postdata($cp); ?>

<article <?php post_class() ?> id="post-<?php the_ID(); ?>">
  <h1><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h1>
  <?php if (has_post_thumbnail()) : ?>
  <a href="<?php the_permalink() ?>"><?php the_post_thumbnail(($hasOutputNotFeaturedDiv) ? 'thumb-small' : null) ?></a>
  <?php endif; ?>
  <?php the_excerpt(); ?>
  <p class="more"><a href="<?php the_permalink() ?>">Read more ...</a></p>
  <?php include (TEMPLATEPATH . '/inc/meta.php' ); ?>
</article>

<?php endforeach; ?>

但似乎只有 the_excerpt 包含新的后期数据值,为什么呢?我发现如果我使用 echo get_the_permalink($cp)它可以正常工作。但我认为较短的版本会更好

最佳解决方案

我可能是错的,但从我看到的,”setup_postdata()” 应该用于做一个自定义选择查询 (不只是 query_posts):http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query

同样,如果要使用”the_title()” 和”the_permalink()” 等标签与该自定义选择查询一起使用… 您需要在 setup_postdata() 中使用变量名称 (不是另一个变量名) – 至少应该调用 global $ post 在您的”foreach” 循环之前…

所以基本上遵循那个抄送链接的例子。并且不要更改变量名 $ post – 否则它会中断它。

HTH

次佳解决方案

更换

foreach ( $childPosts as $cp ) : setup_postdata( $cp );

foreach ( $childPosts as $post ) : setup_postdata( $post );

因此,您需要使用精确的 $post 变量以及 setup_postdata()

第三种解决方案

根据你在哪里使用 setup_postdata()(如果它不在主循环中,或者在函数/侧边栏小工具中),你可能还需要声明 –

global $post;

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。