web-dev-qa-db-de.com

Wie kommt man WP EST Timezone verwenden

In meinen Einstellungen habe ich New York als Zeitzone definiert. Aber wenn ich Plugins mit PHP date () - Funktionen ausführe, erhalte ich eine Zeitzone von UTC, wie in WP Admin> Einstellungen> Allgemein angegeben.

 enter image description here 

 enter image description here 

Edit: Hier ist das Mu-Plugin, mit dem ich das Meta-Tag hinzufüge:

<?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() ist in WP unzuverlässig, da es die Zeitzone immer auf UTC zurücksetzt und seine eigene Verarbeitung für Zeitzonen verwendet.

date_i18n() ist normalerweise vorzuziehen WP zu ersetzen, aber wird auch die Ausgabe lokalisieren, was möglicherweise unerwünscht ist.

Was Sie für eine korrekte nicht lokalisierte Ausgabe wünschen, ist Folgendes:

  1. Ruft Daten aus der WP-API ab, ohne dass die Offset-Dummheit auftritt.
  2. Holen Sie sich die Zeitzoneneinstellung aus WP.
  3. Feed diese in DateTime Objekt.

Hier ist eine kurze Einführung in den Code:

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

Ich habe in meinem DateTime-Crashkurs für WordPress-Entwickler post mehr zum Thema geschrieben.

PS EEST/EET nicht synchron ... Ich weiß nicht einmal, was mit diesem Unterschied los ist. :)

3
Rarst

Überschriften

Zunächst einmal: Die http-equiv-Meta-Tags sind das HTML equiv alent eines HTTP-Antwort-Headers. Sie können nicht einen Header überschreiben, der bereits von Ihrem Webserver gesendet wurde. Ihre einzige Verwendung ist also ein Fallback, und sie leisten selten echte Hilfe. In Wirklichkeit möchten Sie die Header korrigieren, die Ihre Server senden, oder Ihren Host bitten, dies zu tun, wenn Sie sich in einer freigegebenen Umgebung befinden und dies nicht dürfen.

Datums- und Uhrzeitoptionen

All diese können abgerufen werden über: get_option( 'name' );. Mögliche Werte sind:

  • Zeitformat: time_format - Standard: __('g:i a') (string)
  • Zeitzone: timezone_string - Standard: null (Zeichenfolge)
  • Datumsformat: date_format - Standard: __('F j, Y') (string)
  • GMT-Offset: gmt_offset - Standard: date('Z') / 3600 (integer)

Dann gibt es verschiedene andere mögliche Funktionen, die Sie verwenden können, je nachdem, was Sie tatsächlich anzeigen (verwenden Sie "Bedingte Tags", um umzuschalten):

  • Einzelne Post oder Seite (oder benutzerdefinierte Post): the_date()
  • Archive: Verwenden Sie das aktuellste Post-Datum für dieses Archiv…

Hier ist Ihr Plugin, das leicht neu formatiert wurde, um den Namen der Zeitzone aus dem GMT-Offset abzurufen. Es berücksichtigt PHP Bug # 44780 (props uınbɐɥs ) sowie benutzerdefinierte Einstellungen von Ihrer Admin-Benutzeroberfläche. Wenn Sie das nicht möchten, müssen Sie ein wenig mit den Optionen spielen. Was fehlt, sind die bedingten Schalter

<?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