WordPress vi dà la possibilità di cambiare la data di pubblicazione di un post e vi fornisce get_the_date() per recuperarla facilmente nel frontend. Cosa succede, però, se, per qualsiasi motivo, vuoi accedere alla data effettiva in cui il post è stato creato, invece di quella che hai impostato manualmente?

Apparentemente, WordPress mantiene la meta chiave _wp_old_date che memorizza la vecchia data ogni volta che cambia. Puoi facilmente recuperarla usando get_post_meta(). Quindi, echoing get_post_meta( get_the_ID(), '_wp_old_date' ); vi darà un array con tutte le vecchie date:

array (size=3) 0 => string '2020-03-14' 1 => string '2020-03-21' 2 => string '2020-03-11'

Secondo la documentazione, get_post_meta() accetta un terzo parametro opzionale che se impostato su true restituirà solo il primo valore. Quindi, possiamo facilmente ottenere la data di creazione del post semplicemente usando get_post_meta( get_the_ID(), '_wp_old_date', true );.

Ecco la fregatura, però: se non avete mai cambiato la data del post, _wp_old_date sarà vuoto. Per affrontarlo, dobbiamo controllare se _wp_old_date è vuoto e se lo è, ricadiamo nel nostro familiare get_the_date(). Se ha un valore, possiamo restituirlo, tenendo a mente due cose:

  1. Probabilmente vorremmo mantenere il formato di visualizzazione che è impostato dall’Admin sulle opzioni di WordPress. Possiamo recuperarlo con un semplice get_option( 'date_format' ).
  2. Dovremmo anche usare date_i18n, per essere sicuri di recuperare la data in un formato localizzato.

Quindi, alla fine, una funzione più a prova di futuro sarebbe probabilmente qualcosa del genere:

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()}

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.