WordPress vă oferă opțiunea de a modifica data publicării unei postări și vă pune la dispoziție get_the_date() pentru a o prelua cu ușurință în frontend. Ce se întâmplă însă dacă, dintr-un motiv oarecare, doriți să accesați data reală la care a fost creată postarea, în loc de cea pe care ați setat-o manual?

Se pare că WordPress păstrează metacheia _wp_old_date care stochează vechea dată de fiecare dată când aceasta se schimbă. Puteți prelua cu ușurință acest lucru folosind get_post_meta(). Așadar, dacă veți da ecoul get_post_meta( get_the_ID(), '_wp_old_date' );, veți obține un array cu toate datele vechi:

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

Conform documentației, get_post_meta() acceptă un al treilea parametru opțional care, dacă este setat la true, va returna doar prima valoare. Așadar, putem obține cu ușurință data de creare a postului pur și simplu folosind get_post_meta( get_the_ID(), '_wp_old_date', true );.

Iată însă capcana: dacă nu ați schimbat niciodată data postului, _wp_old_date va fi gol. Pentru a face față, trebuie să verificăm dacă _wp_old_date este gol, iar dacă este, ne întoarcem la familiarul nostru get_the_date(). Dacă are o valoare, o putem returna, ținând cont de două lucruri:

  1. Probabil că am dori să menținem formatul de afișare care este setat de către Admin pe opțiunile WordPress. Putem prelua asta cu un simplu get_option( 'date_format' ).
  2. De asemenea, ar trebui să folosim date_i18n, pentru a ne asigura că recuperăm data într-un format localizat.

Așa că, în final, o funcție mai rezistentă la viitor ar arăta probabil cam aș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()}

Lasă un răspuns

Adresa ta de email nu va fi publicată.