web-dev-qa-db-ja.com

メインのbbPressループの真上に `query_posts`を使ったメインループを置くと、恐ろしいバグに遭遇する可能性がありますか?

これはコードです:

            <?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つの返信をリストします。 2番目のbbPressループは、他のすべての応答をDESC順にリストします。

同じファイルテンプレートにこの2つのループがあると、バグが発生しますか?

1
janoChen

私はこのようにしないでください、しかしそれは問題になるべきではありません。あなたのテンプレートファイルが実行されるとき、「本当のメインループ」はすでにこのページの投稿を含んでいます。次にquery_posts()を実行して2番目のクエリを実行します。これにより、「実際の」ループが「隠されます」が、終了した後でwp_reset_query()を実行すると「実際の」ループが再びアクティブなループになります。

2つのループをembedにすると、混乱してエラーが発生します。したがって、そのメインのwhereループで別のquery_posts()を実行した場合はエラーになります。それから、エラーを防ぐために get_posts()または直接WP_Query を使わなければなりません。

個人的には、私は自分自身をquery_posts()と呼ぶことはなく、常にget_posts()を使用します。なぜなら、それは「背後で」グローバル変数を変更しないからです。

1
Jan Fabry