在插件文件中使用‘DATE_DEFAULT_TIMEZONE_SET’安全吗?

时间:2012-07-02 作者:its_me

我正在使用一个站点地图插件,它以非常复杂的方式设置<lastmod> (即上次修改时间)发布到GMT。

暂时,在插件开发人员修复之前,我需要在插件上强制一个自定义时区。我发现的简单而直接的方法是添加以下内容date_default_timezone_set( \'America/New_York\'); 就在第一次之后<?php 在负责输出站点地图的文件中。

它可以工作,而且似乎不会影响站点其余部分显示的时间戳。那么,我可以接受这个吗?还是有更好的解决方案?

3 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成

http://codex.wordpress.org/Function_Reference/get_gmt_from_date

替换的所有实例get_the_datethe_date 具有echo get_gmt_from_date(get_the_date(\'Y-m-d H:i:s\')). 这不是一种快速修复方法,而是一种修复站点地图的方法。

编辑:

WordPress SEO通过一个名为mysql2date, 依次调用date_i18n. date_i18n 恰巧有一个方便的过滤器,您可以将其连接到其中以更改日期:

<?php
add_filter(\'date_i18n\', \'wpse57195_filter_date\', 10, 4);
/**
 * Changes the date on WordPress SEO\'s sitemaps
 *
 * @return string The Date
 */
function wpse57195_filter_date($date, $format, $timestamp, $gmt)
{
    // if this isn\'t a sitemap page, bail
    if(!get_query_var(\'sitemap\'))
        return $date;

    // W3C Time format with -05:00 for central time
    // NOTE: this doesn\'t account for daylight saving time
    $f = \'Y-m-d\\TH:i:s-05:00\';
    return $gmt ? gmdate($f, $timestamp) : date($f, $timestamp);
}
在hooked函数中,您可以检查sitemap查询变量,并根据需要更改时间。与sitemap spec, 您必须使用W3C date format 其中包括时区的+/-字段-05:00是中央夏令时的数字。你可以总结一下in a plugin 并将其激活,直到站点地图可以修复为止。

SO网友:Marco Marsala

目前,内置功能current_time() expects函数date_default_timezone_set() 从未使用过。

检查代码current_time() 确认了这一点,因为该函数使用内置PHP格式化结果date() 功能(受时区影响);事实上,Wordpress似乎总是将时区重置为UTC(一种echo date_default_timezone_get() 放置在顶部和底部wp-config.php 在干净的WordPress设置中将证明这一点)。

看见https://core.trac.wordpress.org/ticket/38940

SO网友:William Turrell

No. (好吧,您可以在完成后立即将其更改回来,但这很容易出错。)

而且,无论你做什么都不要覆盖date_default_timezone_set()在您的wp-config.php; wp-settings.php 将此设置为UTC 你不能改变它。

例如,设置为欧洲/伦敦(夏季比格林尼治标准时间提前一小时),将使格林尼治标准时间提前一小时,您可以通过/wp-admin/options-general.php

本质上,这意味着系统时区的值/etc/timezone 和PHP的date.timezone ini值被WordPress忽略。

嗯,如果WordPress core设置为UTC以外的值,应该会有某种警告,但是没有,所以要小心。

Related WPSE question - Related blog

结束

相关推荐

WordPress Sitemap for MSSQL

有没有人知道适合WordPress的MS Sql站点地图插件?以下是我得到的错误:Array ( [0] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 402 [code] => 402 [2] => [Microsoft][SQL Server Native Clie