2013-02-01 22 views
2

我試圖通過wordpress中的類別鏈接的帖子顯示相關帖子,但我無法過濾結果。在foreach中的foreach和通過它們過濾

這是我的時刻代碼:

 $current_post = $post->ID; 
     $i = 0; 
     $categories = get_the_category(); 
     foreach ($categories as $category) {    
      $posts = get_posts('numberposts=4&category='. $category->term_id . '&exclude=' . $post->ID); 
       foreach($posts as $post) { 
            // DO BASIC ECHO POST CONTENT STUFF 

        $i++; 
        if ($i == 3) break; 
         } 
      } 


wp_reset_query(); 

我的代碼的問題是,當一個職位是在3個類別(即使這不是良好的網絡實踐)這個循環回聲的12個職位(每個類別4篇),如果不同的文章在相同的3類中,則顯示3次(重複)。我想顯示MAX 4帖子,並沒有重複。

我以爲$ i == 3 break;會在第一次「全球」4結果後停止。但它不?我該如何做才能在結果中沒有重複的結果?

+0

函數'get_posts()'不能在sql端使用'GROUP BY'進行任何過濾嗎? –

+1

你打破只會停止帖子循環。如果你想停止兩次循環,試試用'if($ i == 3)break 2;' – Spin0us

+0

你需要更清楚地解釋你想要輸出的內容。也許你可以舉個例子。 – 2013-02-01 09:26:45

回答

0
$current_post = $post->ID; 
     $i = 0; 
     $categories = get_the_category(); 
     foreach ($categories as $category) {    
      $posts = get_posts('numberposts=4&category='. $category->term_id . '&exclude=' . $post->ID); 
       foreach($posts as $post) { 
            // DO BASIC ECHO POST CONTENT STUFF 

        $i++; 
        if ($i == 3) break 2; 
         } 
      } 

wp_reset_query();

1

您可以創建顯示的帖子數組,然後檢查不在此數組中的帖子是否顯示它。

$show_array = array(); 

// ... 

foreach($posts as $post) { 
    if (!in_array($post['id'], $show_array)) { 
     // show post 
     $show_array[] = $post['id']; 
    } 
}