web-dev-qa-db-ja.com

プラグインファイルで 'date_default_timezone_set'を使用しても安全ですか?

私はサイトマッププラグインを使用しています。これは非常に複雑な方法でGMTへの投稿のための<lastmod>のタイムゾーン(つまり最終更新時刻)を設定します。

一時的に、プラグイン開発者がそれを修正するまで、私はカスタムタイムゾーン をプラグインに強制する必要があります 。私が見つけた簡単で直接的な方法は、サイトマップの出力を担当するファイルの最初の<?phpの直後にdate_default_timezone_set( 'America/New_York');のようなものを追加することです。

それはうまくいきます、そしてそれはサイトの他の部分に表示されるタイムスタンプに影響を与えるようには見えません。それで、私はこれで行くことができますか?それとももっと良い解決策がありますか?

3
its_me

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

get_the_dateまたはthe_dateのすべてのインスタンスをecho get_gmt_from_date(get_the_date('Y-m-d H:i:s'))に置き換えます。これは簡単な修正ではありません。サイトマップを修正する方法です。

編集:

WordPress SEOはMySQLから生の日付をmysql2dateと呼ばれるWP関数を通して実行します。そしてそれは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);
}

フック関数では、サイトマップクエリ変数を確認し、必要に応じて時間を変更できます。 sitemap仕様 を維持するには、タイムゾーンの+/-フィールドを含む W3C日付形式 を使用する必要があります。 -05:00は、中央夏時間の番号です。上記の をプラグイン にラップして、サイトマップが修正されるまで有効にすることができます。

1
chrisguitarguy

現在、組み込み関数current_time()は、関数date_default_timezone_set()が決して使用されないことを期待しています。

current_time()のコードを調べると、この関数はPHP組み込みdate() function(タイムゾーンの影響を受ける)を使用して結果をフォーマットするため、これを確認しました。実際、Wordpressは常にタイムゾーンをUTCにリセットしているようです(きれいなWordPressの設定でwp-config.phpの上と下に配置されたecho date_default_timezone_get()がこれを証明します)。

https://core.trac.wordpress.org/ticket/38940 を参照してください。

1
Marco Marsala

No.(それが終わったらすぐに元に戻すこともできますが、間違いが起こりやすいのです。)

また、wp-config.phpdate_default_timezone_set ()をオーバーライドしないでください。 wp-settings.phpはこれをUTCに設定します。変更してはいけません。

たとえば、ヨーロッパ/ロンドンに設定すると(夏はGMTより1時間早くなります)、GMTは本来の値よりも1時間早くなります - /wp-admin/options-general.phpで確認できます。

基本的に、これはシステムタイムゾーンの値/etc/timezoneとPHPのdate.timezone iniの値がWordPressによって無視されることを意味します。

私見、それがUTC以外の値に設定されている場合、WordPressコアにある種の警告があるべきですが、そうではないので、注意してください。

関連するWPSEの質問 - 関連するブログ

0
William Turrell