[英]Sorting Wordpress posts by date entered (Date Picker) in advanced custom fields
[英]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.