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.
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' );
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:
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. :)
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.
Tous ceux-ci peuvent être récupérés via: get_option( 'name' );
. Les valeurs possibles sont:
time_format
- défaut: __('g:i a')
(chaîne)timezone_string
- défaut: null
(chaîne)date_format
- défaut: __('F j, Y')
(chaîne)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):
the_date()
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 )
);
} );