0

当我使用WordPress Atom 发布协议插件(也是以前的 wp-app.php)通过 Atompub API发布条目时,如果条目包含非 GMT 时间值作为已发布字段,如下所示:

<entry xmlns='http://www.w3.org/2005/Atom'><title type='text'>test</title><content type='text/html'>test</content>
<published>2013-08-27T00:00:00+09:00</published>
<app:control xmlns:app='http://www.w3.org/2007/app'><app:draft>no</app:draft></app:control><category term='test'/></entry>

时区(+09:00)未正确解析,并且相同的值(GMT 时间)存储post_datepost_date_gmt.wp_posts

post_date: 2013-08-27 00:00:00
post_date_gmt: 2013-08-27 00:00:00
4

1 回答 1

0

用以下代码替换get_publish_time()函数:wp-content/plugins/atom-publishing-protocol/class-wp-atom-server.php

/**
 * Retrieve published time to display in XML.
 *
 * @since 2.3.0
 *
 * @param string $published Time string.
 * @return string
 */
function get_publish_time($published) {
    $pubtime = DateTime::createFromFormat(DateTime::RFC3339, $published);

    if (!$pubtime) {
        return array(current_time('mysql'),current_time('mysql',1));
    } else {
        $localtime = $pubtime->format("Y-m-d H:i:s");
        $pubtime->setTimezone( new DateTimeZone('UTC') );
        $gmttime = $pubtime->format("Y-m-d H:i:s");
        return array($localtime, $gmttime);
    }
}

注意

  • 需要 PHP >= 5.2
  • 如果 wp-app.php 仍然存在,则不使用该插件。

原因

这是因为rfc3339_str2time()原始实现中的函数会丢弃时区信息。

于 2013-08-24T22:07:22.400 回答