不使用wp_Reset_postdata();时如何触发错误?如果循环在没有它的情况下运行,为什么还要使用它?

时间:2017-01-25 作者:john-thomas

我的代码中有两个循环,为什么我需要使用wp_reset_postdata(); 每一次之后,如果没有任何区别?

定义:在循环通过一个单独的查询后,此函数将$post global恢复到主查询中的当前post。

因此,如果我创建一个查询post\\u类型、类别或post type=“post\\u type”(这是循环的默认参数)以外的任何内容,那么wp_reset_postdata(); 将post\\U类型还原为“post\\U类型”?如果是这样的话,代码中会是什么样子,或者我刚才写的是胡说八道?

不管怎样,你能给我举个例子吗?

        <div class="one-half">
                    <h2>Latest Opinion</h2>
                        <?php // opinion posts loop begins here
                        $opinionPosts = new WP_Query(\'cat=1&posts_per_page=2\');

                        if ($opinionPosts->have_posts()) :
                            while ($opinionPosts->have_posts()) : $opinionPosts->the_post(); ?>
                                <div class="post-item clearfix">
                                        <?php the_excerpt(); ?>
                                </div>
                            <?php endwhile;
                            else : // fallback no content message here
                        endif;
                        wp_reset_postdata(); ?>
        </div><!-- /one-half -->

        <div class="one-half last">
                    <h2>Latest News</h2>
                        <?php // news posts loop begins here
                        $newsPosts = new WP_Query(\'cat=23&posts_per_page=2\');

                        if ($newsPosts->have_posts()) :
                            while ($newsPosts->have_posts()) : $newsPosts->the_post(); ?>                           
                                <div class="post-item clearfix">
                                    <?php the_excerpt(); ?>
                                    </div><!-- /post-item -->
                            <?php endwhile;
                            else :  // fallback no content message here
                        endif;
                        wp_reset_postdata();
        </div> <!-- /one-half -->

                    ?>

1 个回复
SO网友:Rarst

您缺少将上下文恢复到原始状态的要点。

是的,您的循环可以在不重置的情况下工作。但是,任何试图在它们之后访问被查询的post的操作都会命中全局变量中自定义查询的剩余内容,而不是从主查询中的post。

从字面意义上讲,在这段特定代码中第一次查询后的重置是多余的,因为没有其他操作,您只需继续执行另一个查询。然而,保留它是一个好主意,因为如果将来对代码进行更改,事情的顺序很可能会改变,这将突然导致不必要的问题。

相关推荐