Como mostrar a data real da postagem em um rascunho

3

Ao olhar para uma postagem de rascunho, get_the_date() parece retornar apenas a data de hoje, não a data da postagem, mesmo que eu tenha selecionado outra data na tela de edição de postagem.

Existe uma maneira de mostrar a data de postagem "atual", aquela que eu selecionei?

Eu posso ver no banco de dados MySQL que ele está salvo na coluna post_date. Mas, como get_the_date, $post->post_date não retorna. Se a postagem for um rascunho, mostrará a data e a hora atuais.

    
por supertrue 23.02.2012 / 01:56

4 respostas

7

Sim, como você - até agora - não tem data de publicação.

Você pode usar $post->post_modified , que sempre será a data da última modificação nos dados da postagem.

Depurar:

Tente ligar o filtro e despejar ambos os vars:

function date_dump_callback( $date, $d )
{
    echo '<pre>'; print_r( $date ); print_r( $d ); echo '</pre>';
    return $date;
}
add_filter( 'get_the_date', 'date_dump_callback', 20, 2 );
    
por kaiser 23.02.2012 / 07:56
3

Não sei por que está modificando os dados desse tipo ao exibir, mas você pode usar

$post->post_date_gmt

Isso retornará a data de postagem programada da mesma forma que no banco de dados, exceto no formato GMT, portanto, talvez seja necessário converter a hora para o fuso horário local primeiro ( esta postagem do blog pode ajudar . Caso contrário, você deve ser capaz de usá-lo como se estivesse usando apenas a data & não é a hora, mas depende do que você está fazendo com isso.

Editar 29/02/12:

Eu queria elaborar minha resposta para torná-la mais completa e dar a você algo que você possa realmente usar.

Você está certo, a data da postagem está sendo armazenada no campo post_date no banco de dados.

Por exemplo, o wordpress usa essa linha de código em wp-admin/includes/meta-boxes.php para definir a variável usada para exibir a data da postagem para rascunhos programados para o futuro:

$date = date_i18n( $datef, strtotime( $post->post_date ) );

No entanto, ao usar o mesmo código para exibição no front end, ele retorna a hora atual como você disse. Acho que podemos concluir que os dados do objeto $post estão sendo preparados de forma diferente para o front end.

De qualquer forma, é possível produzir a mesma data agendada que você definiu no admin.

Como parece que não podemos usar $post->post_date , podemos usar $post->post_date_gmt como eu disse antes - a única desvantagem é que seu fuso horário provavelmente não é o mesmo que GMT. Então, tudo o que você precisa fazer é extrair o valor GMT e convertê-lo em seu fuso horário.

Você pode adicionar esta função ao seu functions.php e chamá-lo onde quiser:

<?php
/**
*@param string $datef (optional) to pass the format you want for the returned date string
*@return string
*/
function get_the_real_post_date($datef = 'M j, Y @ G:i') {

    global $post;

    if ( !empty( $timezone_string = get_option( 'timezone_string' ) ) )  {

        $timezone_object = timezone_open( $timezone_string );
        $datetime_object = date_create( $post->post_date_gmt );

        $offset_sec = round( timezone_offset_get( $timezone_object, $datetime_object ) );
        // if you want $offset_hrs = round( $offset_sec / 3600 );

        return date_i18n( $datef, strtotime( $post->post_date_gmt ) + $offset_sec );

    } elseif (!empty( $offset_hrs = get_option('gmt_offset') ) ) {

        // this option shows empty for me so I believe it's only used by WP pre 3.0
        // the option stores an integer value for the time offset in hours

        $offset_sec = $offset_hrs * 3600;
        return date_i18n( $datef, strtotime( $post->post_date_gmt ) + $offset_sec );

    } else {

        return;  // shouldn't happen but...

    }
}

É claro que você também pode alterar o formato de hora padrão definido na definição do parâmetro, se houver um formato específico que você usaria mais.

Deixe-me saber se isso funciona para você. Estou curioso, o que você está usando a data para?

    
por Evan Mattson 28.02.2012 / 21:08
0

Você pode produzir a data programada para um rascunho lendo o banco de dados usando a classe wpdb através da variável global $ wpdb fornecida por Worpdress (veja enlace ).

Adicione isto às suas funções.php:

// function to get scheduled date for draft post
function unpublished_draft_date(){
  global $wpdb; global $post;
  $post_id = $post->ID;
  $draft_date_array = $wpdb->get_results( 'SELECT post_date FROM wp_posts WHERE ID = '.$post_id );
  $draft_date = $draft_date_array[0]->post_date;
  return $draft_date;
}

E isso dentro do seu loop de postagem:

echo unpublished_draft_date();

Eu forneci apenas o código básico para obter a data desejada. É fácil formar a data se você precisar e inserir um ID de postagem para a função se não quiser usar o ID de postagem atual ou se quiser usar a função fora do loop.

Por favor, comente abaixo se você precisar de instruções mais específicas.

    
por jounileander 05.06.2013 / 11:26
0
  

Nos meus rascunhos, $ post- > post_date_gmt é apenas 0000-00-00 00:00:00 - supertrue 4 de junho às 15:08

Não há como editar a data de publicação de um rascunho que ainda não foi publicado. O valor de post_date_gmt será 0000-00-00 00:00:00 até a postagem ser publicada.

Certifique-se de que a postagem tenha sido publicada pelo menos uma vez. A visibilidade pode ser definida como privada se você não quiser que ela seja publicada publicamente. Uma vez publicado, você poderá editar a data e deverá salvá-la como o valor de post_date e post_date_gmt indefinidamente, a menos que você a altere novamente. Os valores post_modified e post_modified_gmt continuarão a ser alterados a qualquer momento que você modificar a postagem.

Eu testei isso e post_date_gmt será definido para a data e hora atuais após a publicação da postagem com visibilidade definida como privada. Você também pode editar a data neste ponto e ela deve ser atualizada.

  

Se você pode modificar e salvar uma data na tela de edição de um rascunho (que você pode) - supertrue 29 de fevereiro de 2012 às 1:36

Não, você não pode modificar e salvar uma data na tela de edição de um rascunho. Antes de publicar um rascunho, essa mesma área do metabox "Publicar" no editor de postagem é usada para programar uma data para a postagem ser publicada no futuro. É claro que você não poderá definir uma data ou hora passada para o agendamento, e a data futura provavelmente não será definida para post_date_gmt até que seja publicada.

    
por iyrin 05.06.2013 / 01:25