何时使用wp_Reset_postdata();

时间:2016-10-05 作者:klewis

我为TweentySexten主题模板创建了一个子主题。我看到主回路位于索引中。但是注意到在while语句之后,没有显示wp_reset_postdata(); 如果我把它放在那里,循环会有什么好处吗?

出于测试目的,我想在第一个循环下显示第二个循环,并设置页面限制。我想应该是这样的。。。

$mposts = new WP_Query(\'posts_per_page=3\');
    while ( $mposts->have_posts() ) : $mposts->the_post();
        get_template_part( \'template-parts/content\', get_post_format() );
    endwhile;
如果这是正确的,我应该wp_reset_query, 在此过程之前还是之后?如果有它是有帮助的,为什么它放在哪里很重要?

谢谢

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

首先,我们应该谈谈为什么需要使用wp_reset_query() 首先。

什么wp_reset_query() 是否重置global $wp_query 对象返回其原始状态。因为您正在创建new WP_Query 对象/实例,itdoes not 覆盖global $wp_query 对象唯一需要调用此函数的实际情况是query_posts() 99%的情况下你都不应该这样。

每当您循环执行自定义WP\\U查询时(使用The Loop 如上所述)它将覆盖global $post 对象,这意味着我们应该使用wp_reset_postdata() 相反因为它只在循环过程中发生,所以我们应该在循环之后调用函数。我们应该首先检查以确保我们有帖子,并确保我们不会不必要地调用此函数,我们希望将其放入条件中,如下面的示例所示:

$myquery = new WP_Query( $args );

if( $myquery->have_posts() ) {

    while( $myquery->have_posts() ) {
        $myquery->the_post();
        /** Content **/
    }

    wp_reset_postdata();
}

相关推荐

当in_the_loop()为假时,何时以及为什么is_Single(‘my_cpt’)为真?

我正在使用模板系统的示例代码。此地址的页码:http://project.test/my_cpt/hello-post/.无法理解原因is_singular( \'my_cpt\' ) 是true 虽然in_the_loop() 是false.在页面模板中The Loop "E;“工程”:if ( have_posts() ) { while ( have_posts() ) { the_post(); ?>