web-dev-qa-db-fra.com

Comment avoir WP utiliser le fuseau horaire EST

Dans mes paramètres, New York est défini comme le fuseau horaire. Mais lorsque j'exécute des plug-ins à l'aide des fonctions PHP date (), le fuseau horaire UTC s'affiche, comme indiqué dans WP Admin> Paramètres> Général.

 enter image description here 

 enter image description here 

Edit: Voici le plug-in mu que j'utilise pour ajouter la balise Meta:

<?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() n'est pas fiable dans WP car il réinitialise toujours le fuseau horaire sur UTC et utilise son propre traitement pour les fuseaux horaires.

date_i18n() est généralement préférable WP replacement, mais il localisera également la sortie, ce qui pourrait être indésirable.

Ce que vous voulez pour une sortie non localisée correcte est de:

  1. Extraire des données de l'API WP sans la rendre absurde.
  2. Récupère le fuseau horaire dans WP.
  3. Nourrissez-les dans l'objet DateTime.

Voici une brève introduction (introduction au code: lisez les bases, ne couvrant pas toutes les possibilités):

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

J'ai écrit plus sur le sujet dans mon cours intensif DateTime pour les développeurs WordPress post.

PS EEST/EET désynchronisé ... Je ne sais même pas ce qui se passe avec cette différence. :)

3
Rarst

En-têtes

Tout d'abord: les balises méta http-equiv sont le HTML equiv alent d'un en-tête de réponse HTTP. Ils ne peuvent pas remplacer un en-tête déjà envoyé par votre serveur Web. Donc, leur seule utilisation est une solution de secours et ils fournissent rarement une aide réelle. En réalité, vous souhaitez corriger les en-têtes que votre/vos serveur (s) envoie (s) à la place - ou demandez à votre hôte de le faire si vous êtes dans un environnement partagé et que vous n'êtes pas autorisé à le faire.

Options de date et heure

Tous ceux-ci peuvent être récupérés via: get_option( 'name' );. Les valeurs possibles sont:

  • Format de l'heure: time_format - défaut: __('g:i a') (chaîne)
  • Fuseau horaire: timezone_string - défaut: null (chaîne)
  • Format de date: date_format - défaut: __('F j, Y') (chaîne)
  • Décalage GMT: gmt_offset - valeur par défaut: date('Z') / 3600 (entier)

Ensuite, il existe plusieurs autres fonctions possibles que vous pouvez utiliser, en fonction de ce que vous affichez réellement (utilisez "Balises conditionnelles" pour passer):

  • Message unique ou page (ou message personnalisé): the_date()
  • Archives: utilisez la date de publication la plus récente pour ces archives…

Voici votre plugin, légèrement reformaté pour récupérer le nom du fuseau horaire de l'offset GMT, compte PHP Bogue n ° 44780 (props uınbɐɥs ) ainsi que des paramètres personnalisés de votre interface d'administration. Si ce n'est pas ce que vous voulez, vous devrez jouer un peu avec les options. Ce qui manque, ce sont les commutateurs conditionnels

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