Wordpress:已发布字段的时区问题(Atom发布协议插件)

时间:2013-08-24 22:07:22

标签: wordpress atompub

当我使用WordPress Atom Publishing Protocol Plugin(也就是之前的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

1 个答案:

答案 0 :(得分: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&gt; = 5.2
  • 如果wp-app.php仍然存在,则不会使用该插件。

原因

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