Como obter a data de publicação posterior fora do loop?

8

Preciso retirar a data de publicação da postagem para que a postagem da publicação expire automaticamente. O problema é que não consigo a data certa de publicação.

Aqui está o meu código:

 global $wpdb;

$post_ids = $wpdb->get_results( "SELECT ID FROM $wpdb->posts WHERE post_status ='publish'" );

foreach($post_ids as $id){

      $postdate = get_the_date("Y-m-d",$id ); //here is what I can figure out
       .......
      ......etc
}

Quando eco o $ pós-data, ele sai com uma data errada. Não é a data que existe na tabela wp_posts.

Como posso obter a data corretamente?

dev-jim
fonte

Respostas:

15

get_the_datedeve ser usado dentro do loop. Para uso fora do loop get_the_time.

$posts = get_posts(array('numberposts'=>-1)); //Get all published posts
foreach ($posts as $post){
    echo get_the_time('Y-m-d', $post->ID); //Echos date in Y-m-d format.
}

Considere substituir 'Y-m-d'neste exemplo por, get_option('date_format')pois isso exibirá a data conforme sua configuração de formato de data em wp-admin.

Stephen Harris
fonte
Eu tentei get_the_time também, mas ainda me deu a data errada.
dev-jim
11
E você passa o ID da postagem para ele? get_the_timeé a função correta a ser usada aqui.
Stephen Harris
11
Além disso - você não deve usar uma consulta SQL personalizada aqui. Use get_postse então se você quer extrair apenas os IDs, usowp_list_pluck
Stephen Harris
Estou fazendo algo para atualizar o post_status com base na data de publicação. Existe alguma outra maneira de atualizar o status? Até agora, a consulta SQL parece a maneira mais fácil para mim.
dev-jim
11
@DavidHobs Fixed :)
Stephen Harris
1

Algumas almas modernas

Solução Um

<?php echo get_the_date('j F Y', get_the_ID()) ?>

Solução dois

<?php the_time(get_option('date_format')) ?>
Osama Elzero
fonte
0

Você pode usar get_post () ou get_post_field () para isso, ambos funcionam fora do loop.

$post_object = get_post($id);
$post_date = date( 'F jS, Y', strtotime( $post_object->post_date ) );

Uma lista completa de valores retornados por get_post:

WP_Post Object
(
    [ID] =>
    [post_author] =>
    [post_date] => 
    [post_date_gmt] => 
    [post_content] => 
    [post_title] => 
    [post_excerpt] => 
    [post_status] =>
    [comment_status] =>
    [ping_status] => 
    [post_password] => 
    [post_name] =>
    [to_ping] => 
    [pinged] => 
    [post_modified] => 
    [post_modified_gmt] =>
    [post_content_filtered] => 
    [post_parent] => 
    [guid] => 
    [menu_order] =>
    [post_type] =>
    [post_mime_type] => 
    [comment_count] =>
    [filter] =>
)
Uriahs Victor
fonte
-2

tente assim

$getPosts = $wpdb->get_results( 
"
    SELECT ID, post_date,post_title
    FROM $wpdb->posts
    WHERE post_status = 'publish' 
        AND post_type = 'post'
        ORDER BY ID ASC
    "
);

foreach ( $getPosts as $myPost ) {
    $id = $myPost->post_date;
    echo $myPost->ID.' | '. $myPost->post_title.' | '. get_the_date("Y-m-d",$id ).'<br />';
}

editar

get_the_time Retorna o horário da postagem atual para uso no PHP. Não exibe a hora. Para exibir a hora de uma postagem, use the_time (). Essa tag deve ser usada no The Loop.

get_the_date A tag do modelo get_the_date recupera a data em que a postagem $ atual foi gravada. Diferentemente de the_date (), essa tag sempre retornará a data. Modifique a saída com o filtro 'get_the_date'.

Estou faltando alguma coisa aqui?

Gembel Intelek
fonte
Mesclar suas respostas.
Fuxia
mostre-me como mesclar, por favor?
Gembel Intelek
Edite a primeira resposta e copie o código da segunda para ele. Em seguida, exclua o segundo.
Fuxia
Eu tentei seus códigos e posso obter o valor de get_the_time, não get_the_date.
dev-jim