1

因此,我试图仅显示介于开始日期 (st_date) 和结束日期 (end_date) 自定义字段之间的当前事件。目前,这对当前事件根本不起作用。

根据我的时区(东部)-5,我当前安装 Wordpress 的时间是正确的。

我试图更改我的 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;
}
4

1 回答 1

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 客户端中运行它,看看你会得到什么结果。

于 2012-12-31T22:33:42.113 回答