WordPress te da la opción de cambiar la fecha de publicación de un post y te proporciona get_the_date() para obtenerla fácilmente en el frontend. ¿Qué sucede, sin embargo, si, por cualquier razón, quieres acceder a la fecha real en que se creó el post, en lugar de la que estableciste manualmente?
Aparentemente, WordPress mantiene la meta clave _wp_old_date
que almacena la fecha antigua cada vez que cambia. Puedes recuperarla fácilmente usando get_post_meta()
. Así, haciendo eco de get_post_meta( get_the_ID(), '_wp_old_date' );
se obtendría un array con todas las fechas antiguas:
array (size=3) 0 => string '2020-03-14' 1 => string '2020-03-21' 2 => string '2020-03-11'
Según la documentación, get_post_meta()
acepta un tercer parámetro opcional que si se establece como true devolverá sólo el primer valor. Por lo tanto, podemos obtener fácilmente la fecha de creación de la entrada simplemente utilizando get_post_meta( get_the_ID(), '_wp_old_date', true );
.
Aquí está la trampa, sin embargo: Si usted nunca cambió la fecha de la entrada, _wp_old_date
estará vacío. Para solucionarlo, tenemos que comprobar si _wp_old_date
está vacío y, si lo está, volvemos a nuestro conocido get_the_date()
. Si tiene un valor podemos devolverlo, teniendo en cuenta dos cosas:
- Probablemente queramos mantener el formato de visualización que establece el administrador en las opciones de WordPress. Podemos recuperar eso con un simple
get_option( 'date_format' )
. - También deberíamos usar date_i18n, para asegurarnos de que recuperamos la fecha en un formato localizado.
Así que, al final, una función más a prueba de futuro probablemente sería algo así:
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()}