Il existe quelques options, dont aucune ne fonctionne vraiment bien. C'est un bug de WordPress, et ça craint vraiment parce que l'heure est fausse, sauf si vous définissez votre site sur UTC ... ce qui est déroutant et même pas toujours possible.
Je pense que ce code suivant ne fonctionne que si vous choisissez votre fuseau horaire (sous Paramètres -> Général dans admin) comme ville nommée plutôt que par un décalage de numéro GMT. Je n'ai pas testé cela, mais il est très possible que ce get_option('gmt_offset')
soit réglé quand ce get_option('timezone_string')
n'est pas le cas.
date_default_timezone_set(get_option('timezone_string'));
L'inconvénient est que WordPress suppose que PHP est défini sur UTC lors de la création des horodatages mysql. Vous pouvez donc modifier un peu votre base de données lorsque vous changez de fuseau horaire! Sans parler des autres plugins WP, on peut supposer que l'environnement PHP est toujours en UTC.
Donc, si vous voulez juste une heure correcte - vous pouvez forcer votre horodatage à être en UTC avec:
get_post_time('c', true); //should work for non-post objects.
Malheureusement, bien que correct, le fuseau horaire sera réglé sur UTC.
Et notez que vous ne pouvez pas utiliser à la fois le drapeau "true" et la fonction timezone_set par défaut.
Toute solution appropriée va consister en un extrait de code qui prend en compte à la fois gmt_offset
AND timezone_string
et les utilise pour définir un fuseau horaire sur une entrée. WP suppose que PHP est défini sur UTC lors de l'exécution des horodatages mysql, et cela pourrait endommager d'autres plugins.
Une solution de ce type est disponible sur https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ mais, là encore, il s'agit d'un bogue, vous devez donc utiliser le get_post_time($date_format, TRUE)
code pour obtenir un horodatage qui est en fait correct.