0

我有一个名为“Portfolio”的帖子类型和single-portfolio.php 文件来处理它(它是WordPress)。当我在那里使用类似的东西时,它会像预期的那样工作:

$post_id = $post->ID; //returns ID of current portfolio post. Good!

但是当我在中间发布这样的简短查询时:

$post_id = $post->ID; //returns ID of current portfolio post. Good!
wp_reset_query();
query_posts('posts_per_page=4');
    if ( have_posts() ) : while ( have_posts() ) : the_post();
            the_id(); //returns ID of standard blog post
        endwhile;
    endif; 
wp_reset_query();
$post_id = $post->ID; //returns ID of last BLOG post. Wrong!

我只关心$post_id上面例子中的变量。我希望它始终返回当前 PORTFOLIO 帖子的正确 ID,而不依赖于其他查询。我该如何做到这一点?

4

2 回答 2

3

我相信wp_reset_postdata()会给你你正在寻找的结果。

$the_query = new WP_Query( 'posts_per_page=4' );

if ( $the_query->have_posts() ) :
    while ( $the_query->have_posts() ) : $the_query->the_post();
        // output
    endwhile;
endif;

wp_reset_postdata();

我应该注意,我在另一个问题中记录了另一种方法,询问有什么区别以及何时应该使用每种方法

于 2013-02-14T01:13:10.313 回答
0

wp_reset_query函数$post也会重置全局变量,但仅基于全局$wp_query变量。这仍然被修改,可能是由于 Wordpress 中的一个小缺陷。在你的情况下,我会说一个简单的WP_Query::rewind_posts()应该做到这一点:

wp_reset_query();
$wp_query->rewind_posts();
$post_id = $post->ID;

此外,您应该考虑创建第二个循环,而不是覆盖第一个循环。

另见:

于 2012-06-27T10:13:49.227 回答