簡體   English   中英

在“開始”和“結束”日期自定義字段之間顯示當前的Wordpress帖子

[英]Show current Wordpress posts between “start” and “end” date custom fields

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

根據我的時區(東部),我當前在Wordpress安裝上的時間是正確的-5。

我試圖更改Wordpress網站上的日期格式以匹配Ymd,但是由於即將發生的事件和以前的事件都在顯示,所以它顯然沒有幫助我。

是要用的服務器時間嗎? 截至目前的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;
}

我可以考慮檢查的幾件事:

如果您擔心時區不正確,可以始終讓MySQL提供datetime。 您將更改如下語句:

$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客戶端中運行該命令,然后查看返回的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM