私の設定では、ニューヨークをタイムゾーンとして定義しています。しかし、PHP date()関数を使用してプラグインを実行すると、WP Admin> Settings> Generalに表示されるようにUTCのタイムゾーンを取得します。
編集: これがメタタグを追加するための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' );
date()
はWPでは信頼性が低く、常にタイムゾーンをUTCにリセットし、タイムゾーンに独自の処理を使用します。
date_i18n()
は通常はWP replacement、 の方が望ましいですが、 は出力をローカライズするため、これは望ましくない場合があります。
ローカライズされていない正しい出力に必要なものは、次のとおりです。
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が同期していません...その違いがどうなっているのか私にもわかりません。 :)
最初に: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_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 )
);
} );