我应该放置wp_reset_postdata();结束之后;或者结束?

时间:2017-02-03 14:05:15

标签: php wordpress

我花了一些时间阅读WordPress Codex以及各种主题,并且可以看到一些开发人员在<?php wp_reset_postdata(); ?>之后在Blog循环中插入endif;,而其他人则在Blog循环的endwhile;endif;。我已经尝试了两个地点,但还没有看到差异。有正确的位置吗?

2 个答案:

答案 0 :(得分:1)

此函数应该重置您运行的secondery查询..函数the_post允许您使用可以在循环中运行的所有函数,如the_title() the_content和等...... ..

所以你重置了the_post功能,在endwhile;后你可以重置它。如果您愿意,也可以在if声明中使用您的主要查询。

<?php
// this is the main query check if there is posts
if ( have_posts() ) : 
    // loop the main query post and run the_post() function on each post that you can use the function the_title() and so on..
    while ( have_posts() ) : the_post(); 
        the_title(); // title of the main query

        // the is second query
        $args = array( 'posts_per_page' => 3 );
        $the_query = new WP_Query( $args );
        // check if there is a posts in the second query
        if ( $the_query->have_posts() ) :
            // run the_post on the second query now you can use the functions..
            while ( $the_query->have_posts() ) : $the_query->the_post();
                the_title();
                the_excerpt();
            endwhile;

            // reset the second query
            wp_reset_postdata();

            /* here we can use the main query function already if we want..
            its in case that you want to do something only if the second query have posts.
            You can run here third query too and so on...
            */

            the_title(); // title of the main query for example

        endif;

    endwhile;
endif;
?>

答案 1 :(得分:0)

仅当您有一个辅助循环(您正在页面上运行其他查询)时才需要

wp_reset_postdata()。该函数的目的是将全局post变量恢复回主查询中的当前帖子。

示例:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

    OUTPUT MAIN POSTS HERE

<?php endwhile; endif; ?>

在上面的代码中,我只是使用主循环来显示帖子。没有理由包含wp_reset_postdata()。全局的post变量正是它应该的样子。

如果页面上的其他位置我决定添加辅助循环,那么我需要wp_reset_postdata()

// This query is just an example. It works but isn't particularly useful.
$secondary_query = new WP_Query( array(
    'post_type' => 'page'
) );

if ( $secondary_query->have_posts() ) :

    // Separating if and while to make answer clearer.
    while ( $secondary_query->have_posts() ) : $secondary_query->the_post();

        // OUTPUT MORE STUFF HERE.

    endwhile;

    wp_reset_postdata();

endif;

要回答您的原始问题:它通常在endwhile之后和endif之前。这是对the_post()的调用,它实际上改变了全局post变量。如果没有帖子,则post变量保持不变,并且没有理由使用重置功能。<​​/ p>