A WordPress lehetőséget ad arra, hogy megváltoztasd a posztok megjelenési dátumát, és biztosítja a get_the_date() funkciót, amellyel könnyen lekérdezheted azt a frontendben. Mi történik azonban, ha valamilyen okból kifolyólag nem a kézzel beállított, hanem a bejegyzés létrehozásának tényleges dátumát szeretnéd elérni?

A WordPress nyilvánvalóan megtartja a _wp_old_date meta kulcsot, amely minden változáskor a régi dátumot tárolja. Ezt könnyen lekérdezheted a get_post_meta() segítségével. Tehát a get_post_meta( get_the_ID(), '_wp_old_date' ); visszahívása egy tömböt adna az összes régi dátummal:

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

A dokumentáció szerint a get_post_meta() elfogad egy harmadik, opcionális paramétert, amely ha true-ra van állítva, akkor csak az első értéket adja vissza. Így könnyen megkaphatjuk a bejegyzés létrehozásának dátumát egyszerűen a get_post_meta( get_the_ID(), '_wp_old_date', true ); használatával.

Itt van azonban a bökkenő: Ha soha nem változtattuk meg a bejegyzés dátumát, a _wp_old_date üres lesz. Ahhoz, hogy ezt kezeljük, ellenőriznünk kell, hogy a _wp_old_date üres-e, és ha igen, akkor vissza kell esnünk a megszokott get_the_date()-hez. Ha van értéke, akkor visszaadhatjuk, két dolgot szem előtt tartva:

  1. Valószínűleg szeretnénk megtartani a WordPress beállításainál az admin által beállított megjelenítési formátumot. Ezt egy egyszerű get_option( 'date_format' ) segítségével tudjuk lekérdezni.
  2. A date_i18n-t is használnunk kell, hogy a dátumot lokalizált formátumban kapjuk le.

Szóval végül egy jövőbiztosabb függvény valószínűleg valahogy így nézne ki:

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

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.