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:

  1. 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' ).
  2. 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()}

Lämna ett svar

Din e-postadress kommer inte publiceras.