web-dev-qa-db-ja.com

取得する方法 WP ESTタイムゾーンの使い方

私の設定では、ニューヨークをタイムゾーンとして定義しています。しかし、PHP date()関数を使用してプラグインを実行すると、WP Admin> Settings> Generalに表示されるようにUTCのタイムゾーンを取得します。

enter image description here 

enter image description here 

編集: これがメタタグを追加するためのmu-pluginです。

<?php
/**
 * Plugin Name: Web Services Global Meta Tag(s)
 * Plugin URI: http://example.com/wp-content/mu-plugins/global-metatag-insertion.php
 * Description: This plugin fires on every page and post in the WordPress Multisite Network. It adds custom meta tags to meets our needs. One meta tag that is added is for `last-modified` date.
 * Version: 1.0
 * Author: me
 * Author URI: http://me.example.com/
 */
defined( 'ABSPATH' ) or die( 'Direct access not allowed' );

/**
 * Insert `last-modified` date meta within `<head></head>` container
 */
function last_modified_date() {
    echo '<meta http-equiv="last-modified" content="' . date( 'D, d M Y H:i:s T', strtotime( get_the_date() .' ' . get_the_time() ) ) . '" />' . "\n";
}
add_action( 'wp_head', 'last_modified_date' );
5
user94620

date()はWPでは信頼性が低く、常にタイムゾーンをUTCにリセットし、タイムゾーンに独自の処理を使用します。

date_i18n()は通常はWP replacement、 の方が望ましいですが、 は出力をローカライズするため、これは望ましくない場合があります。

ローカライズされていない正しい出力に必要なものは、次のとおりです。

  1. オフセットのずれがなく、WP AP​​Iからデータを取得します。
  2. WPからタイムゾーン設定を取得します。
  3. それらをDateTimeオブジェクトに入れてください。

ここに、コードの簡単な説明(基本を読んで、すべての可能性を網羅するのではありません)を紹介します。

d( date( 'D, d M Y H:i:s T', strtotime( get_the_date() .' ' . get_the_time() ) ) );
// Sat, 07 Jan 2012 07:07:00 UTC < wrong, date() is always wrong in WP

d( date( 'D, d M Y H:i:s T', get_the_time('U') ) );
// Sat, 07 Jan 2012 07:07:21 UTC < more short, still wrong

d( date_i18n( 'D, d M Y H:i:s T', get_the_time('U') ) );
// or simply
d( get_the_time( 'D, d M Y H:i:s T' ) );
// Сб, 07 Jan 2012 07:07:21 EEST < correct! but localized

$date = DateTime::createFromFormat( DATE_W3C, get_the_date( DATE_W3C ) );
d( $date->format( 'D, d M Y H:i:s T' ) );
// Sat, 07 Jan 2012 07:07:21 GMT+0300 < correct, but meh numeric time zone

$timezone = new DateTimeZone( get_option( 'timezone_string' ) );
$date->setTimezone( $timezone );

d( $date->format( 'D, d M Y H:i:s T' ) );
// Sat, 07 Jan 2012 06:07:21 EET < correct and not localized

私はWordPress開発者のための私の DateTimeクラッシュコース postでトピックについてもっと書いた。

PS EEST/EETが同期していません...その違いがどうなっているのか私にもわかりません。 :)

3
Rarst

ヘッダ

最初に:http-equivメタタグはHTMLの equiv たくさんのHTTPレスポンスヘッダです。 はあなたのWebサーバから既に送信されているヘッダを上書きすることはできません 。そのため、それらの唯一の使用は代替としてであり、それらが実際の支援を提供することはめったにありません。実際には、あなたは自分のサーバが代わりに送信しているヘッダを修正して修正したいでしょう - あるいはあなたが共有環境にいてそうすることが許されていないならホストにそうするように頼みます。

日付と時刻のオプション

それらはすべてget_option( 'name' );で取得できます。可能な値は次のとおりです。

  • 時間の形式:time_format - デフォルト:__('g:i a')(文字列)
  • タイムゾーン:timezone_string - デフォルト:null(string)
  • 日付フォーマット:date_format - デフォルト:__('F j, Y')(string)
  • GMTオフセット:gmt_offset - デフォルト:date('Z') / 3600(integer)

次に、実際に表示しているものに応じて、使用できる他の機能がいくつかあります(切り替えるには "Conditional Tags"を使用します)。

  • 単一の投稿またはページ(またはカスタム投稿): the_date()
  • アーカイブ:このアーカイブの最新の投稿日を使用する…

これは、GMTオフセットからタイムゾーン名を取得するために少しフォーマットし直されたプラグインです。 PHP Bug#44780 (props uınbɐɥs )、および管理UIからのカスタム設定も説明します。それがあなたが望んでいるものでないならば、あなたはオプションで少し遊ぶ必要があるでしょう。欠けているのは条件付きスイッチです。

<?php
/* Plugin Name: "Last Modified" meta tag */
add_action( 'wp_head', function() 
{
    // Abort if not on at home/ on the front page as this is just an example
    if ( ! ( is_home() or is_front_page() )
        return;

    $offset = get_option( 'gmt_offset' ) * 3600;
    $zone = timezone_name_from_abbr( '', $offset, 1 );
    ! $zone and $zone = timezone_name_from_abbr( '', $offset, 0 );
    $format = get_option( 'date_format' ).' '.get_option( 'time_format' ) );
    // @TODO adjust to take post date or similar into account
    $date = 'now';

    printf( '<meta http-equiv="last-modified" content="%s" />',
        ( new DateTime( $date, $zone ) )
            ->format( $format )
    );
} );
2
kaiser