2010-10-29 82 views
0

嗨,所以我有一個自定義循環,應該顯示即將到來的事件,只是它沒有考慮到年,所以它顯示未來事件爲過去由於只是月份和日期。自定義循環沒有正確比較元值

<ul class="upcoming"> 
<?php // Get today's date in the right format 
$todaysDate = date('m/d/y H:i:s'); 
?> 

<?php query_posts('showposts=2&cat=9&meta_key=Date&meta_compare=>=&meta_value=' . $todaysDate . '&orderby=meta_value&order=ASC'); ?> 

<?php if (have_posts()) : ?> 
<?php while (have_posts()) : ?> 
<?php the_post(); ?> 

<li> 
    <?php 
    $Date = get_post_meta($post->ID, 'Date', true); 
    ?> 

     <?php if ($Date) : ?> 
     <div class="date"><span class="month"> <?php echo date('M',strtotime($Date));?> </span> 
      <span class="day"><?php echo date('j',strtotime($Date));?> </span></div> 
     <?php endif; ?> 
     <h4 class="EventTitle"><a href="<?php the_permalink(); ?>" title="Permanent link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h4> 
     <span class="EventType"><?php 
        foreach((get_the_category()) as $childcat) { 
        $category_link = get_category_link( 
              $childcat); 
        if (cat_is_ancestor_of(10, $childcat)) { 
        if (in_category('13')) 
        echo "<a href=\"$category_link\">Workshop</a>"; 
        else echo "<a href=\"$category_link\">$childcat->cat_name</a>"; 
        }} 
        ?> 
     </span> 
      </li> 

<?php endwhile; ?> 
<?php else : ?> 
    <p>Check back soon for new events.</p> 
<?php endif; ?>     
<?php wp_reset_query(); ?> 

此模塊的輸出中是「很快回來檢查新事件」,不管事實有可用的未來事件。

我已經搜索了這個東西好幾個小時,無法想出爲什麼它忽略了一年的原因。有任何想法嗎?

回答

1

在我看來,你是比較日期作爲一個字符串,而不是日期文字。而且由於您正在比較字符串,並將其設置爲mm/dd/yyyy,所以月份和日期優先於年份。所以10/21/2014小於10/22/2010

您可能需要重新格式化您的post_meta Date格式,以便能夠進行準確的日期比較。最好的方法是使用yyyy-mm-dd hh:mm:ss,因此所有內容都按優先順序遞減。或者,您可以拆分post_meta Date並依次比較年份,月份,日期和時間。

+0

是的,這是事實,它是作爲一個字符串進行比較,所以今年必須先行。 – 2010-11-08 20:57:41