WordPress giver dig mulighed for at ændre et indlægs udgivelsesdato, og det giver dig get_the_date() til nemt at hente den på frontend. Men hvad sker der, hvis du af en eller anden grund ønsker at få adgang til den faktiske dato, som indlægget var blevet oprettet, i stedet for den dato, som du manuelt har indstillet?

Opstår det sådan, at WordPress beholder metanøglen _wp_old_date, som gemmer den gamle dato, hver gang den ændres. Du kan nemt hente denne ved hjælp af get_post_meta(). Så hvis du ekkoede get_post_meta( get_the_ID(), '_wp_old_date' );, ville du få et array med alle de gamle datoer:

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

I henhold til dokumentationen accepterer en tredje, valgfri parameter, som, hvis den er sat til true, kun returnerer den første værdi. Så vi kan nemt få frem til datoen for oprettelsen af indlægget ved blot at bruge get_post_meta( get_the_ID(), '_wp_old_date', true );.

Her er dog en hage: Hvis du aldrig har ændret datoen for indlægget, vil _wp_old_date være tom. For at håndtere det skal vi kontrollere, om _wp_old_date er tom, og hvis det er, falder vi tilbage på vores velkendte get_the_date(). Hvis den har en værdi, kan vi returnere den, idet vi holder os to ting for øje:

  1. Vi vil sandsynligvis ønske at bevare det visningsformat, der er indstillet af Admin på WordPress-indstillinger. Vi kan hente det med en simpel get_option( 'date_format' ).
  2. Vi bør også bruge date_i18n, for at sikre, at vi henter datoen i et lokaliseret format.

Så i sidste ende ville en mere fremtidssikret funktion sandsynligvis se nogenlunde sådan ud:

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.