2012-12-31 44 views
1

因此,我試圖僅顯示落在開始日期(st_date)和結束日期(end_date)自定義字段之間的當前事件。目前,這對目前的事件根本不起作用。顯示「開始」和「結束」日期自定義字段之間的當前Wordpress帖子

我在WordPress上安裝的當前時間與我的時區(東部)-5一樣正確。

我試圖改變我的Wordpress網站上的日期格式以匹配Y-m-d,但是由於即將發生的事件和以前的事件都顯示出來,它顯然沒有幫助我。

這是服務器時間,它的工作?截至目前12/31,它展示了一個開始日期爲12/30的活動,但不是我以12/31開始日期創建的活動。

這是我目前的代碼。有什麼需要改變的想法?謝謝你的幫助!

//FILER FOR SEPARATING UPCOMING, CURRENT AND PAST EVENTS 
function event_where($where) 
{ 
    global $wpdb,$wp_query; 
    $current_term = $wp_query->get_queried_object(); 
    if((is_archive() || is_tag()) && ($current_term->taxonomy==CUSTOM_CATEGORY_TYPE1 || $current_term->taxonomy==CUSTOM_TAG_TYPE1)) 
    { 
     if($current_term->taxonomy == CUSTOM_CATEGORY_TYPE1 || $current_term->taxonomy == CUSTOM_TAG_TYPE1) 
     { 
      if(@$_REQUEST['etype']=='') 
      { 
       $_REQUEST['etype']='current'; 
      } 
      if(@$_REQUEST['etype']=='current') 
      { 
       $today = date('Y-m-d G:i:s'); 
       $where .= " AND ($wpdb->posts.ID in (select $wpdb->postmeta.post_id from $wpdb->postmeta where $wpdb->postmeta.meta_key='st_date' and date_format($wpdb->postmeta.meta_value,'%Y-%m-%d %G:%i:%s') <='".$today."')) AND ($wpdb->posts.ID in (select $wpdb->postmeta.post_id from $wpdb->postmeta where $wpdb->postmeta.meta_key='end_date' and date_format($wpdb->postmeta.meta_value,'%Y-%m-%d %G:%i:%s') > '".$today."')) "; 
      } 
      elseif($_REQUEST['etype']=='upcoming') 
      { 
       $today = date('Y-m-d G:i:s'); 
       $where .= " AND ($wpdb->posts.ID in (select $wpdb->postmeta.post_id from $wpdb->postmeta where $wpdb->postmeta.meta_key='st_date' and date_format($wpdb->postmeta.meta_value,'%Y-%m-%d %G:%i:%s') >'".$today."' and $wpdb->posts.post_status = 'publish')) "; 
      } 
      elseif($_REQUEST['etype']=='past') 
      { 
       $today = date('Y-m-d G:i:s'); 
       $where .= " AND ($wpdb->posts.ID in (select $wpdb->postmeta.post_id from $wpdb->postmeta where $wpdb->postmeta.meta_key='end_date' and date_format($wpdb->postmeta.meta_value,'%Y-%m-%d %G:%i:%s') < '".$today."')) "; 
      } 
     }elseif(is_day() || is_month() || is_year()) 
     { 
      $where = str_replace("'post'","'".CUSTOM_POST_TYPE1."'",$where); 
     } 
    } 
    return $where; 
} 

回答

0

幾件事我能想到的檢查:

如果你擔心時區是不正確,你總是可以有MySQL的供應日期時間。你會改變如下語句:

$today = date('Y-m-d G:i:s'); 
$where = "AND date_format($wpdb->postmeta.meta_value,'%Y-%m-%d %G:%i:%s') <='" . $today . "'))"; 

到這樣的事情:

$where = "AND date_format($wpdb->postmeta.meta_value,'%Y-%m-%d %G:%i:%s') <= NOW()))"; 

NOW()是MySQL的命令,可以爲當前服務器日期時間。

當您將開始日期和結束日期輸入到自定義字段中時,是使用日期還是日期和時間?如果你沒有使用時間,那麼諸如「2012-12-31」的日期將被解釋爲「2012-12-31 00:00:00」。這可能會導致問題,特別是結束日期。考慮添加一天(或86,400秒)到這種情況的結束日期。

如果您懷疑在正確解釋日期時遇到問題,則MySQL具有與PHP的strtotime()命令相同的結果:STR_TO_DATE。您可以讀取人類可讀的字符串並將其轉換爲您想要的格式。

當使用$ wpdb進行查詢時,可以嘗試輸出$ wpdb-> last_query來查看發送給MySQL的完整SQL的確切時間。嘗試在您最喜愛的MySQL客戶端中運行該程序,並查看返回的結果。

相關問題