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