如果我将一个使用`Query_posts`的主循环放在主bbPress循环的正上方,可能会遇到可怕的错误?

时间:2011-03-26 作者:janoChen

代码如下:

            <?php get_template_part( \'pagination\', \'bbp_replies\' ); ?>

            <?php query_posts(\'gdsr_sort=thumbs&post_type=bbp_reply&posts_per_page=2\'); ?>
            <?php while ( have_posts() ) : the_post(); ?>
                <h2><?php  the_title(); ?></h2>
                <?php the_content(); ?>
            <?php endwhile; ?>
            <?php wp_reset_query(); ?>

            <?php while ( bbp_replies() ) : bbp_the_reply(); ?>

                <div class="topic-entry">

                    <div class="topic-author">
                        <?php bbp_reply_author_link( array( \'type\' => \'avatar\' ) ); ?>
                        <?php bbp_reply_author_link( array( \'type\' => \'name\' ) ); ?>
                        <?php printf( __( \'%1$s\', \'bbpress\' ), get_the_date() ); ?>
                    </div>

                    <div class="topic-content">
                        <?php bbp_reply_content(); ?>
                        <span class="like-counter"><?php DisplayVotes(get_the_ID()); ?></span>
                    </div>

                        <?php bbp_reply_admin_links(); ?>

                    </div>
第一个query_posts 循环列出2个投票最多的回复。第二个bbPress循环按DESC顺序列出所有其他回复。

如果在同一个文件模板中有这两个循环,我会遇到bug吗?

1 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

我不会这样做,但这不应该是个问题。执行模板文件时,“真正的主循环”已经包含此页面的帖子。然后执行query_posts() 要执行第二个查询,该查询“隐藏”了“真实”循环,但在完成后,执行wp_reset_query() 这使得“真实”循环再次成为活动循环。

如果您嵌入这两个循环,那么如果您执行另一个循环,就会变得混乱并导致错误query_posts() 在那主要where 环那么你必须使用get_posts() or a direct WP_Query 以防止错误。

就我个人而言,我从不打电话query_posts() 我自己,并始终使用get_posts(), 因为它“在我背后”不会改变任何全局变量。

结束

相关推荐

Main Loop未在自定义博客模板页面中启动

我为我页面的博客部分制作了一个自定义模板。我甚至将post page设置为Blog.我创建了一个名为“页面内容”的自定义帖子类型,并在#feature 分区,但未显示主要帖子(写在帖子面板中)(#blog 部门)有什么建议可以解决这个问题吗?编辑:我刚刚在webkit inspector中看到:Fatal error: Cannot use object of type WP_Query as array in /home/alex/www/wpa/wp-includes/query.php on lin