WordPress vous donne la possibilité de modifier la date de publication d’un article et il vous fournit get_the_date() pour la récupérer facilement sur le frontend. Mais que se passe-t-il si, pour une raison quelconque, vous voulez accéder à la date réelle à laquelle l’article avait été créé, au lieu de celle que vous avez définie manuellement ?
Apparemment, WordPress conserve la clé méta _wp_old_date
qui stocke l’ancienne date chaque fois qu’elle change. Vous pouvez facilement la récupérer en utilisant get_post_meta()
. Ainsi, l’écho de get_post_meta( get_the_ID(), '_wp_old_date' );
vous donnera un tableau avec toutes les anciennes dates:
array (size=3) 0 => string '2020-03-14' 1 => string '2020-03-21' 2 => string '2020-03-11'
Selon la documentation, get_post_meta()
accepte un troisième paramètre optionnel qui, s’il est défini à true, ne retournera que la première valeur. Ainsi, nous pouvons facilement obtenir la date de création du message simplement en utilisant get_post_meta( get_the_ID(), '_wp_old_date', true );
.
Voici le piège, cependant : si vous n’avez jamais changé la date du message, _wp_old_date
sera vide. Pour y faire face, nous devons vérifier si _wp_old_date
est vide et si c’est le cas, nous nous rabattons sur notre get_the_date()
familier. S’il a une valeur, nous pouvons la retourner, en gardant à l’esprit deux choses:
- Nous voudrions probablement maintenir le format d’affichage qui est défini par l’Admin sur les options de WordPress. Nous pouvons récupérer cela avec un simple
get_option( 'date_format' )
. - Nous devrions également utiliser date_i18n, pour nous assurer que nous récupérons la date dans un format localisé.
Donc, au final, une fonction plus évolutive ressemblerait probablement à quelque chose comme ça:
function get_creation_date( $entry_id = '' ) { $post_id = $entry_id ? $entry_id : get_the_ID(); $old_date = get_post_meta( $post_id, '_wp_old_date', true ); return $old_date ? // If the old date exists date_i18n( get_option( 'date_format' ), // Retrieve the date in localized format strtotime( $old_date ) ) : // and use the display format set on WordPress options get_the_date(); // else, use get_the_date()}
.