2012-06-27 92 views
0

我有一個名爲「Portfolio」的郵件類型和單個portfolio.php文件來處理它(它是WordPress)。當我使用有類似的東西,它像預期:WordPress - 恢復原始WP_Query

$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,而不依賴於其他查詢。我如何實現這一目標?

+0

我找到了一個方法來做到這一點$ temp = $ post;和$ post = $ temp;查詢後,但我不認爲這是官方和推薦的方式。 – Atadj

回答

0

wp_reset_query函數確實會重置全局變量$post,但僅基於全局變量$wp_query。這仍然被修改,可能是由於Wordpress中的一個小缺陷。在你的情況我會說簡單的WP_Query::rewind_posts()應該這樣做:

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

你也應該考慮創建第二個循環,不覆蓋的第一個。

看得那麼清楚: