2014-03-04 22 views
0

我創建了一個循環,顯示在Wordpress主題中創建的課程(自定義帖子類型)。但是,此循環還會顯示今天之前舉行的課程,這就是爲什麼我在$date_start上添加了一個支票,並且如果日期早於今天,則用Ingen kommende kurser替換日期。如果在今天之前PHP循環忽略輸出

但是,我想要的是它完全忽略了今天之前有date_start的實例。現在發生的情況如下:

如果日期是在今天之前,它會被替換爲Ingen kommende kurser(沒有將來的課程)。如果有三個顯示的課程之一,它輸出這樣的:

  • 不收kommende kurser
  • 不收kommende kurser
  • 星期四06三月2014

我需要的是,今天之前的日期完全被忽略,因爲它可能在3月6日之後有一個過程,現在不顯示。

這是循環:

$loop = new WP_Query($args); 
while ($loop->have_posts()) { 
    $loop->the_post(); 
    $category_course = get_the_category(2); 
    $cat_slug_course = $category_course[0]->slug; 
    $date_start = get_post_meta(get_the_ID(), 'date_start', true); 
    $date_start = date("D, M d, Y", $date_start); 
    if(strtotime($date_start) > strtotime('now')) { ?> 
     <li>        
      <a href="<?php the_permalink(); ?>" class="date_fp"><?php echo $date_start; ?></a> 
     </li> 
    <?php } else { ?> 
     <li>        
      Ingen kommende kurser 
     </li> 
    <?php } 
} ?> 

導致:

enter image description here

因此,簡而言之:

從循環忽略的數據,如果date_start在今天之前。當根本沒有數據可顯示時(所有date_start都在今天之前),它應該顯示Ingen kommende kurser

+0

所以如果我說得對,它應該顯示所有的日期或者如果沒有日期,顯示'Ingen kommende kurser'? –

回答

1

你而之前,設置一個標誌:

$empty = true; 

循環內部,if語句後,設置標誌爲false:

if(strtotime($date_start) > strtotime('today')) { ?> 
     <li>        
      <a href="<?php the_permalink(); ?>" class="date_fp"><?php echo $date_start; ?></a> 
     </li> 
    <?php $empty = false; } 

刪除整個else部分,然後在結束,檢查你的國旗

} 
if($empty) { ?> 
    <li>        
     Ingen kommende kurser 
    </li> 
<?php } ?> 

這是幹什麼的確定列表爲空。然後在循環中,如果一個項目有效且出現在列表中,則將空標誌設置爲false以標記列表不再爲空。檢查完所有條目後,如果列表仍爲空,它將包含您的默認空列表條目。

編輯
我剛剛在其他答案上看到了您的評論。你可以很容易地適應國旗作爲櫃檯工作。只需聲明它爲$items = 0;,然後在if之內,使用$items++;而不是$empty = false;,最後檢查if($items==0)。此外,您的循環條件應擴展到while($loop->have_posts() AND $items < 3)

+0

是的,完美!這解決了這個問題。 – Rvervuurt

+0

請注意我的編輯:) – scenia

+0

Lovin'it! :D我更喜歡前端開發人員,所以這有點超出我的舒適區域,哈哈! – Rvervuurt

-2

試試這個:

$loop = new WP_Query($args); 
while ($loop->have_posts()) { 
    $loop->the_post(); 
    $category_course = get_the_category(2); 
    $cat_slug_course = $category_course[0]->slug; 
    $date_start = get_post_meta(get_the_ID(), 'date_start', true); 
    if(strtotime($date_start) > strtotime('today')) { ?> 
     <li>        
      <a href="<?php the_permalink(); ?>" class="date_fp"><?php echo $date_start; ?></a> 
     </li> 
    <?php } else { ?> 
     <li>        
      Ingen kommende kurser 
     </li> 
    <?php } 
    } ?> 
+0

這與減去日期格式轉換一樣,對此有何幫助? – scenia

+0

這只是用「Ingen kommende kurser」替換所有實例。你能解釋一下它應該做什麼? – Rvervuurt

+0

@Rvervuur​​t strtotime('now')返回當前時間的時間戳,而strtotime('today')今天返回「0:00」的時間戳。 – hindmost

0

只是檢查是今天之前或之後(任何你想要的)日期,就像你已經在做,並使用continue keyword從PHP跳過該迭代。

+0

這部分工作,但我猜Wordpress是這裏的罪魁禍首:它運行循環三次,之後,它只是停止。 「繼續」工作,但輸出只有一個日期(因爲三個實例中只有一個是今天之後的)。我需要的是今天之後的所有日期,最多三個,所以我想我必須將它塞進PHP循環中,而不是在WP_Query中。編輯:我從'$ args'中刪除了'posts_per_page'的要求,這部分解決了它。現在只需要計算出最大值3。 – Rvervuurt

+1

只需使用一個計數器並計數到3,當它達到3時,您可以用[break](http://nl3.php.net/break)打破循環。 –