WordPress ger dig möjlighet att ändra ett inläggs publiceringsdatum och ger dig get_the_date() för att enkelt hämta det på frontend. Men vad händer om du av någon anledning vill komma åt det faktiska datumet som inlägget skapades, istället för det som du ställde in manuellt?
Tydligen behåller WordPress metanyckeln _wp_old_date
som lagrar det gamla datumet varje gång det ändras. Du kan enkelt hämta detta med hjälp av get_post_meta()
. Så genom att eka get_post_meta( get_the_ID(), '_wp_old_date' );
skulle du få en array med alla gamla datum:
array (size=3) 0 => string '2020-03-14' 1 => string '2020-03-21' 2 => string '2020-03-11'
Enligt dokumentationen accepterar get_post_meta()
en tredje, valfri parameter som, om den är inställd på true, endast returnerar det första värdet. Vi kan alltså enkelt få fram datumet för skapandet av inlägget genom att använda get_post_meta( get_the_ID(), '_wp_old_date', true );
.
Här finns dock en hake: Om du aldrig har ändrat datumet för inlägget kommer _wp_old_date
att vara tomt. För att hantera detta måste vi kontrollera om _wp_old_date
är tomt och om det är så faller vi tillbaka till vårt välbekanta get_the_date()
. Om det har ett värde kan vi returnera det, med två saker i åtanke:
- Vi vill förmodligen behålla det visningsformat som ställs in av administratören i WordPress-alternativen. Vi kan hämta det med en enkel
get_option( 'date_format' )
. - Vi bör också använda date_i18n, för att se till att vi hämtar datumet i ett lokaliserat format.
Så, i slutändan skulle en mer framtidssäkrad funktion förmodligen se ut ungefär så här:
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()}