Le WordPress d'aujourd'hui, décodé pour les développeurs

Tips

get_post_datetime : un objet DateTimeImmutable obtenu directement depuis un post

Reconstruire un objet date à coups de concaténation de chaînes issues d'un article n'a plus lieu d'être depuis qu'une fonction native s'en charge directement.

Par Clément Hadrot • 22 mars 2026 • 4 min de lecture • Aucun commentaire
get_post_datetime : un objet DateTimeImmutable obtenu directement depuis un post

$date = new DateTime( $post->post_date ); — cette ligne fonctionne, mais elle reconstruit à la main un objet date à partir d’une chaîne déjà stockée sur l’article, sans tenir compte du fuseau horaire de façon explicite, et sans profiter de l’immutabilité qu’offre DateTimeImmutable. Depuis WordPress 5.3, get_post_datetime() évite cette reconstruction manuelle.

Cette fonction répond à un besoin fréquent dans le développement d’extensions et de thèmes : obtenir un objet date manipulable — pour comparer, formater, ajouter un intervalle — directement à partir d’un article, sans passer par une étape intermédiaire de parsing de chaîne.

La signature et ses deux paramètres de contexte

get_post_datetime( int|WP_Post $post = null, string $field = 'date', string $source = 'local' ) retourne un objet DateTimeImmutable, ou false en cas d’échec. Le paramètre $field accepte 'date' pour la date de publication ou 'modified' pour la date de dernière modification. Le paramètre $source accepte 'local' pour le fuseau du site, ou 'gmt' pour l’équivalent UTC déjà stocké en base.

Ce dernier paramètre évite une confusion fréquente avec l’approche manuelle : reconstruire un objet date à partir de post_date mélange souvent, sans le vouloir, une chaîne locale avec un fuseau UTC appliqué par défaut par DateTime, ce qui décale silencieusement le résultat. get_post_datetime() force à choisir explicitement la source, ce qui réduit ce risque.

Afficher une date de modification relative

L'essentiel à retenir : Retourne directement un DateTimeImmutable prêt à l'emploi ; Choisit entre date locale et date GMT du post ; Fonction native disponible depuis WordPress 5.3

Un site d’actualités qui veut afficher, sous chaque article, depuis combien de temps il a été mis à jour pour la dernière fois, peut combiner cette fonction avec human_time_diff() :

function actualites_afficher_derniere_maj( $post_id ) {
    $date_maj = get_post_datetime( $post_id, 'modified' );

    if ( false === $date_maj ) {
        return '';
    }

    return sprintf(
        /* translators: %s : durée écoulée, ex. "2 heures" */
        esc_html__( 'Mis à jour il y a %s', 'actualites-locales' ),
        human_time_diff( $date_maj->getTimestamp() )
    );
}

Aucune conversion de chaîne, aucun appel à strtotime() : l’objet DateTimeImmutable retourné expose directement getTimestamp(), ainsi que toutes les méthodes classiques de manipulation de date offertes par l’extension DateTime de PHP.

Comparer deux dates d’articles

L’immutabilité de l’objet retourné simplifie les comparaisons, puisqu’aucune méthode appelée dessus ne modifie l’objet d’origine :

$date_a = get_post_datetime( $article_a_id );
$date_b = get_post_datetime( $article_b_id );

if ( $date_a && $date_b && $date_a < $date_b ) {
    // $article_a_id a été publié avant $article_b_id.
}

Ce que cette fonction ne fait pas

  • Elle ne formate rien pour l’affichage : pour un rendu localisé selon la langue du site, wp_date() reste l’outil adapté, appliqué séparément sur le timestamp obtenu.
  • Elle ne donne pas non plus l’heure actuelle du site : ce rôle revient à current_time() ou à un objet construit avec le fuseau retourné par wp_timezone().
  • Elle retourne false, pas une exception, en cas d’article introuvable ou de date invalide : ce retour doit être vérifié avant d’appeler une méthode dessus, sous peine d’erreur fatale sur un appel de méthode sur une valeur booléenne.

Toujours vérifier que get_post_datetime() n’a pas retourné false avant d’appeler une méthode sur le résultat : un article supprimé entre deux requêtes suffit à provoquer ce cas.

Un repère utile : la fonction miroir pour écrire une date

Cet article s’est concentré sur la lecture d’une date déjà enregistrée. Pour l’opération inverse — enregistrer une date de publication précise sur un article, par exemple lors d’une importation de contenu — la clé post_date attendue par wp_update_post() reste au format chaîne classique, et non un objet DateTimeImmutable : les deux fonctions ne sont donc pas de simples miroirs l’une de l’autre, ce qui mérite d’être gardé en tête pour éviter une conversion inutile ou, à l’inverse, un format oublié.

En résumé

get_post_datetime() évite une reconstruction manuelle d’objet date à partir des champs bruts d’un article, avec un risque de confusion de fuseau en moins grâce à son paramètre de source explicite. Pour tout traitement qui va au-delà d’un simple affichage — comparaison, calcul d’intervalle, tri par date — cette fonction reste le point de départ le plus direct, avant tout affichage géré séparément par wp_date() ou une fonction de durée relative.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi