所以我试图只显示介于开始日期(st_date)和结束日期(end_date)自定义字段之间的当前事件。目前,这对于当前事件根本不起作用。
我目前在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 :(得分: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-&gt; last_query以查看发送给MySQL的完整SQL的确切时间。尝试在你最喜欢的MySQL客户端中运行它,看看你得到什么结果。