我注册了一个名为“quote”的自定义帖子类型,我试图在Wordpress网站的每一页上显示一个随机的quote。我提取了一个带有以下代码的单引号:
$args = array( \'post_type\' => \'quote\', \'posts_per_page\' => 1, \'orderby\' => \'rand\' );
$posts = get_posts( $args );
//The code between here and the next comment doesn\'t really matter. I can remove it
//and the problem will still exist. As soon as I make the get_posts() call above
// I get the problem
if (sizeof($posts) > 0) {
echo \'<p class="quote"><span class="quote-sym">"</span>\'.$posts[0]->post_content.\'<span class="quote-sym">"</span></p>\';
$author = trim(get_field("author", $posts[0]->ID));
if (!empty($author)) {echo \'<p class="author">- \'.$author.\'</p>\';}
}
//End block
wp_reset_postdata();
这很有效,我可以显示一个随机引用。(我正在使用高级自定义字段插件,它在上面的代码中添加了get\\u field方法。)但是,我的主循环内容已损坏。我的引用不是在页面上显示主循环内容,而是在原处重复了第二次。这是我在主循环中使用的代码。
<?php while(have_posts()) : the_post(); ?>
<div class="post" id="post-<?php the_ID(); ?>">
<div class="entry">
<?php the_content(); ?></div><!-- end entry -->
</div> <!--end post -->
<?php endwhile; ?>
如果删除显示报价的代码,则会恢复主循环内容。我想打电话
wp_reset_postdata()
是在主循环中使用辅助循环的关键,但在这种情况下似乎没有帮助。
有人能给我指出正确的方向吗?
最合适的回答,由SO网友:renny 整理而成
你不需要打电话wp_reset_postdata()
对于get_posts()
因为它实际上并没有修改全局变量$wp_query
.
$posts
虽然是WordPress使用的全局变量。将其更改为新名称,您所拥有的应该可以使用。
$args = array( \'post_type\' => \'quote\', \'posts_per_page\' => 1, \'orderby\' => \'rand\' );
$quote_posts = get_posts( $args );
if (sizeof($quote_posts) > 0) {
echo \'<p class="quote"><span class="quote-sym">"</span>\'.$quote_posts[0]->post_content.\'<span class="quote-sym">"</span></p>\';
$author = trim(get_field("author", $quote_posts[0]->ID));
if (!empty($author)) {echo \'<p class="author">- \'.$author.\'</p>\';}
}
//End block