2014-03-04 15 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)打破循环。 –