次级查询正在破坏主查询

时间:2014-05-25 作者:CodeSmith

我注册了一个名为“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">&quot;</span>\'.$posts[0]->post_content.\'<span class="quote-sym">&quot;</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() 是在主循环中使用辅助循环的关键,但在这种情况下似乎没有帮助。

有人能给我指出正确的方向吗?

1 个回复
最合适的回答,由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">&quot;</span>\'.$quote_posts[0]->post_content.\'<span class="quote-sym">&quot;</span></p>\';
    $author = trim(get_field("author", $quote_posts[0]->ID));
    if (!empty($author)) {echo \'<p class="author">- \'.$author.\'</p>\';}
 } 
 //End block

结束

相关推荐