WordPress lhe dá a opção de alterar a data de publicação de um post e ele lhe fornece get_the_date() para buscá-lo facilmente no frontend. Mas o que acontece se, por qualquer razão, você quiser acessar a data real em que o post foi criado, ao invés daquela que você definir manualmente?

Aparentemente, o WordPress mantém a meta chave _wp_old_date que armazena a data antiga toda vez que ela muda. Você pode recuperar isto facilmente usando get_post_meta(). Assim, echoing get_post_meta( get_the_ID(), '_wp_old_date' ); dar-lhe-ia um array com todas as datas antigas:

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

De acordo com a documentação, get_post_meta() aceita um terceiro, parâmetro opcional que se definido para true irá retornar apenas o primeiro valor. Então, podemos facilmente obter a data de criação do post simplesmente usando get_post_meta( get_the_ID(), '_wp_old_date', true );.

Aqui está a captura, no entanto: Se você nunca alterou a data do post, _wp_old_date estará vazio. Para lidar com isso, precisamos verificar se _wp_old_date está vazio e se estiver, nós voltamos ao nosso familiar get_the_date(). Se tiver um valor, podemos devolvê-lo, tendo em mente duas coisas:

  1. Provavelmente queremos manter o formato de exibição que é definido pelas opções Admin no WordPress. Nós podemos pegar isso com um simples get_option( 'date_format' ).
  2. Nós também devemos usar date_i18n, para ter certeza de que recuperamos a data em um formato localizado.

Então, no final, uma função mais à prova de futuro provavelmente pareceria algo assim:

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

Deixe uma resposta

O seu endereço de email não será publicado.